【发布时间】: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 是适合我用例的函数。如果您将评论转换为答案,我会将其标记为正确答案。
-
完成!我不确定这是否是原因,但仔细想想,似乎确实如此。