У меня есть исходный файл Haskell, в котором используется синтаксис Unicode:
{-# LANGUAGE UnicodeSyntax #-}
succ' :: Int → Int
succ' = succ
main :: IO ()
main = print $ succ' 1
Это анализирует и отлично работает с GHC. Кроме того, стильные-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 ответ
При беглом взгляде на исходный код не похоже, что parseModule
извлекает языковые прагмы из источника перед синтаксическим анализом (parseFile
делает это, вызывая getExtensions
). К моменту начала синтаксического анализа уже слишком поздно включать синтаксис Unicode.
Похожие вопросы
Связанные вопросы
Новые вопросы
haskell
Haskell — это чисто функциональный язык программирования со строгой статической типизацией, отложенными вычислениями, обширной поддержкой параллелизма и параллелизма, а также уникальными возможностями абстракции.
parseModule
извлекает языковые прагмы из источника перед синтаксическим анализом (parseFile
делает это, вызываяgetExtensions
). К моменту начала синтаксического анализа уже слишком поздно включать синтаксис Unicode.