Estoy tratando de reformatear/reimprimir el código fuente de haskell (eliminar/agregar espacios en blanco, saltos de línea, cambiar el estilo de inserción ...). Encontré el paquete haskell-src-exts que puede analizar e imprimir bastante el código fuente de haskell.Código fuente de haskell con bastante impresión con comentarios
Usando la función parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment]))
También recibo los comentarios incluidos en el código fuente. Ahora quiero imprimir el Módulo/AST con los comentarios en las posiciones originales, pero no puedo encontrar una función que lo haga. Solo puedo imprimir bastante el AST. ¿Tengo que implementar la impresión del AST más los comentarios yo mismo o ya existe esa biblioteca?
Para aclarar consideran siguiente ejemplo:
A.hs archivo:
module A (fn1) where
-- | Haddock-comment
fn1 ::
String ->
String
fn1 _ = "" -- another comment
En ghci, escribiendo
Prelude Control.Monad.Reader Language.Haskell.Exts> (liftM prettyPrint) $ (liftM fst) $ (liftM fromParseResult) $ parseFileWithComments defaultParseMode "A.hs"`
imprime el código fuente del módulo (sin los comentarios, por supuesto) . Puedo usar cualquier función prettyPrint
para modificar el formato del código fuente.
Ahora quiero ser capaz de hacer algo como esto:
do
(ast, comments) <- fromParseResult $ parseFileWithComments defaultParseMode "A.hs"
prettyPrintWithComments ast comments
para obtener una versión bastante impresa del archivo original, incluyendo los comentarios.
Eso es bastante útil, pero no es exactamente lo que quería. Todavía quiero ser capaz de reformatear el código fuente real con un bonito estilo de impresión 'Style' y' PPHsMode'. – haja
@haja: ¿por qué no? Sigue siendo una instancia de la clase 'Pretty' de haskell-src-ext ... – ivanm
pero, de nuevo, ¿cómo pueden incluirse los comentarios originales en la salida de impresión bonita? No puedo encontrar una función que imprima muy bien los comentarios _including_. – haja