2010-07-09 21 views
5

Le paquetage haskell-src-exts a des fonctions pour imprimer de manière agréable un AST Haskell. Ce que je veux faire, c'est changer son comportement sur certains constructeurs, dans mon cas, la manière dont les pragmas SCC sont imprimés. Donc tout le reste devrait être imprimé par défaut, seules les SCC sont traitées différemment. Est-il possible de le faire sans copier le source file et l'éditer, ce qui est ce que je fais maintenant?Modification de la jolie imprimante à partir de haskell-src-exts

Répondre

2

Eh bien, la bibliothèque a fait une chose correctement, en utilisant une classe de type pour Pretty. Le défi consiste alors à sélectionner une instance différente pour les constructeurs que vous souhaitez imprimer différemment. Idéalement, vous devez simplement saisir le noeud AST qui vous intéresse et le remplacer par l'AST.

Maintenant, le problème ici est que l'AST Haskell exporté par la bibliothèque a sa structure de type fixe. Ce n'est pas le cas, par exemple. utilisez two-level types, ce qui vous permettrait de remplacer les nouveaux types de parties de l'arbre. Vous devrez donc redéfinir le type de l'AST jusqu'au nœud dont vous souhaitez changer le type.

+0

Comment cette technique pourrait-elle être utilisée pour remplacer un nœud dans l'AST? Disons que je veux remplacer (dans les définitions de l'article cité) 'Arith' dans' Term' avec un type personnalisé 'MyArith'. Est-ce que 'Term' n'est pas fixé avec sa définition pour utiliser' Arith'? –