Ho un file sorgente Haskell, che utilizzando la sintassi Unicode:Analisi UnicodeSyntax con haskell-src-exts
{-# LANGUAGE UnicodeSyntax #-}
succ' :: Int → Int
succ' = succ
main :: IO()
main = print $ succ' 1
Questo analizza e funziona bene con GHC. Inoltre, stylish-haskell e hlint (entrambi basati su haskell-src-exts) possono leggere questo file senza problemi. Tuttavia, quando provo ad analizzare me stesso usando Haskell-src-exts:
import Language.Haskell.Exts (parseModule)
main = do
x <- readFile "test.hs"
print $ parseModule x
ricevo il seguente messaggio di errore:
ParseFailed (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1}) "TypeOperators is not enabled"
Tuttavia, fornendo UnicodeSyntax esplicitamente nella lista estensioni o utilizzando ParseFile funziona fine:
import Language.Haskell.Exts
main = do
x <- readFile "test.hs"
print $ parseModuleWithMode defaultParseMode
{ extensions = [UnicodeSyntax]
} x
parseFile "test.hs" >>= print
Qualche idea sul perché il primo approccio fallisce?
Da uno sguardo superficiale all'origine, non sembra che 'parseModule' estrae il prgema del linguaggio dall'origine _before_parsing (' parseFile' lo fa chiamando 'getExtensions'). Quando è iniziata l'analisi, è già troppo tardi per abilitare la sintassi Unicode. –
Hai ragione, grazie! Sembra che parseFileContents sia la funzione appropriata per il mio caso d'uso. Se converti il tuo commento in una risposta, la contrassegnerò come la risposta corretta. –
Fatto! Non ero assolutamente sicuro che questa fosse la ragione, ma a ben guardare, sembra proprio che sia così. –