2010-07-09 7 views
5

El paquete haskell-src-exts tiene funciones para imprimir bastante un Haskell AST. Lo que quiero hacer es cambiar su comportamiento en ciertos constructores, en mi caso la forma en que se imprimen los pragmas de SCC. Entonces, todo lo demás debe imprimirse de la manera predeterminada, solo los SCC se manejan de manera diferente. ¿Es posible hacerlo sin copiar el source file y editarlo, que es lo que estoy haciendo ahora?Modificación de la impresora bonita de haskell-src-exts

Respuesta

2

Bueno, la biblioteca ha hecho una cosa bien, usando una clase de tipo para Pretty. El desafío entonces es cómo seleccionar una instancia diferente para los constructores que desea imprimir de manera diferente. Lo ideal sería que teclearas de nuevo el nodo AST que te interese y, de algún modo, lo sustituyeses en AST.

Ahora, el problema aquí es que el AST Haskell exportado por la biblioteca tiene su estructura de tipos fija. No es así, p. use two-level types, que le permitiría sustituir los nuevos tipos por partes del árbol. Entonces, debería redefinir el tipo de AST hasta el nodo donde desea cambiar el tipo de.

+0

¿Cómo podría usarse esta técnica para reemplazar un nodo en el AST? Digamos que quiero reemplazar (en las definiciones del documento citado) 'Arith' en' Término' con algún tipo personalizado 'MyArith'. ¿No se fija 'Término' con su definición para usar 'Arith'? –