使用haskell-src-exts解析UnicodeSyntax

时间:2013-04-03 09:49:21

标签: haskell

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

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

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

这解析并运行GHC。另外,Stylish-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

知道第一种方法失败的原因吗?

1 个答案:

答案 0 :(得分:6)

从粗略地看一眼来源,在解析之前parseModule从源中提取语言编译指示看起来不像parseFile通过调用getExtensions来做到这一点。在解析开始时,启用unicode语法已经太晚了。