【问题标题】:Parsing UnicodeSyntax with haskell-src-exts使用 haskell-src-exts 解析 UnicodeSyntax
【发布时间】:2013-04-03 09:49:20
【问题描述】:

我有一个使用 Unicode 语法的 Haskell 源文件:

{-# LANGUAGE UnicodeSyntax #-}
succ' :: Int → Int
succ' = succ

main :: IO ()
main = print $ succ' 1

这可以用 GHC 解析并运行良好。此外,style-haskell 和 hlint(均基于 haskell-src-exts)可以毫无问题地读取该文件。但是,当我尝试使用 haskell-src-exts 自己解析它时:

import Language.Haskell.Exts (parseModule)

main = do
    x <- readFile "test.hs"
    print $ parseModule x

我收到错误消息:

ParseFailed (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1}) "TypeOperators is not enabled"

但是,在扩展列表中显式提供 UnicodeSyntax 或使用 parseFile 就可以了:

import Language.Haskell.Exts

main = do
    x <- readFile "test.hs"
    print $ parseModuleWithMode defaultParseMode
        { extensions = [UnicodeSyntax]
        } x

    parseFile "test.hs" >>= print

知道为什么第一种方法会失败吗?

【问题讨论】:

  • 粗略看一下源代码,parseModule 看起来不像是在 解析之前从源代码中提取语言编译指示(parseFile 确实通过调用 @ 987654327@)。当解析开始时,启用 unicode 语法已经太迟了。
  • 你是对的,谢谢!看起来 parseFileContents 是适合我用例的函数。如果您将评论转换为答案,我会将其标记为正确答案。
  • 完成!我不确定这是否是原因,但仔细想想,似乎确实如此。

标签: haskell haskell-src-exts


【解决方案1】:

粗略看一下源代码,parseModule 似乎不会在解析之前从源代码中提取语言编译指示(parseFile 确实通过调用 getExtensions 来做到这一点)。当解析开始时,启用 unicode 语法已经太迟了。

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多