Mic*_*man 11 haskell haskell-src-exts
我有一个使用Unicode语法的Haskell源文件:
{-# LANGUAGE UnicodeSyntax #-}
succ' :: Int ? Int
succ' = succ
main :: IO ()
main = print $ succ' 1
Run Code Online (Sandbox Code Playgroud)
这与GHC解析并运行良好.另外,Stylish-haskell和hlint(都基于haskell-src-exts)可以毫无困难地读取这个文件.但是,当我尝试使用haskell-src-exts解析它时:
import Language.Haskell.Exts (parseModule)
main = do
x <- readFile "test.hs"
print $ parseModule x
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
ParseFailed (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1}) "TypeOperators is not enabled"
Run Code Online (Sandbox Code Playgroud)
但是,在扩展列表中显式提供UnicodeSyntax或使用parseFile工作正常:
import Language.Haskell.Exts
main = do
x <- readFile "test.hs"
print $ parseModuleWithMode defaultParseMode
{ extensions = [UnicodeSyntax]
} x
parseFile "test.hs" >>= print
Run Code Online (Sandbox Code Playgroud)
知道第一种方法失败的原因吗?
从粗略地看一下源代码,它parseModule在解析之前看起来不像从源中提取语言编译指示(parseFile通过调用来做getExtensions).在解析开始时,启用unicode语法已经太晚了.