Il n'y a haskell-src-exts qui va analyser votre code et il a un joli module d'impression pour l'impression de l'AST à une chaîne. E. g.
import Language.Haskell.Exts
main = interact codeFormat
codeFormat = check . fmap reformat . parseModuleWithComments where
reformat = prettyPrint
check r = case r of
ParseOk a -> a
ParseFailed loc err -> error $ show (loc,err)
Exemple:
λ> putStrLn $ codeFormat "module X where x = 1 where { y 1 = 2; y _ = 2 }"
module X where
x = 1
where y 1 = 2
y _ = 2
Alternativement, vous pouvez écrire une jolie imprimante vous-même (même basé sur la ci-dessus si vous voulez juste à se spécialiser), et puis vous pouvez avoir n'importe quel style que vous voulez. Remplacer prettyPrint
avec votre propre. L'AST est très simple.
Ensuite, vous pouvez le brancher avec Emacs pour reformater à chaque fois que vous cliquez sur enregistrer ou de quelque chose.