nueva respuesta
Ahora he escrito hindent, que está escrita en términos de haskell-src-exts. Tiene soporte Emacs y Vim.
respuesta Antiguo
No es haskell-src-exts que analizar el código y tiene un módulo de impresión bonita para la impresión de la AST en una cadena. P.ej.
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)
Ejemplo:
λ> putStrLn $ codeFormat "module X where x = 1 where { y 1 = 2; y _ = 2 }"
module X where
x = 1
where y 1 = 2
y _ = 2
Alternativamente, usted puede escribir una impresora bastante a sí mismo (incluso sobre la base de lo anterior, si lo que desea especializarse), y entonces usted puede tener cualquier estilo que desee. Reemplace prettyPrint
con el suyo. El AST es muy directo.
Luego puede conectarlo con Emacs para volver a formatear cada vez que presione guardar o algo así.
Unos años tarde pero existe ahora, he actualizado mi respuesta de aceptación con él. –
echa un vistazo a brittany –