2013-04-03 51 views
11

我有一个使用Unicode语法一个Haskell源文件:解析UnicodeSyntax哈斯克尔-SRC-EXTS

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

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

这解析并运行良好与GHC。另外,Stylish-haskell和hlint(都基于haskell-src-exts)可以毫无困难地读取这个文件。然而,当我尝试使用解析它自己哈斯克尔-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 

任何想法为什么第一种方法失败?

+2

粗略地看一下源代码,它看起来不像'parseModule'从源代码解析语句(parseFile'通过调用'getExtensions'来完成)。在解析开始的时候,启用unicode语法已经太晚了。 –

+0

你是对的,谢谢!它看起来像parseFileContents是我的用例适当的功能。如果您将您的评论转换为答案,我会将其标记为正确的答案。 –

+0

完成!我并不完全确定这是原因,但是在更多思考的情况下,它似乎确实如此。 –

回答

6

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