11

我有一个使用 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

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

4

1 回答 1

7

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

于 2013-04-03T12:36:43.973 回答