2013-04-03 81 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語法已經太晚了。