Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying the pretty printer from haskell-src-exts

The haskell-src-exts package has functions for pretty printing a Haskell AST. What I want to do is change its behavior on certain constructors, in my case the way SCC pragmas are printed. So everything else should be printed the default way, only SCCs are handled differently. Is it possible to do it without copying the source file and editing it, which is what I'm doing now?

like image 785
Daniel Avatar asked Nov 06 '22 11:11

Daniel


1 Answers

Well, the library has done one thing right, using a type class for Pretty. The challenge then is how to select a different instance for the constructors you want to print differently. Ideally, you would just newtype the AST node you care about, and somehow substitute that into the AST.

Now, the problem here is that the Haskell AST exported by the library has its type structure fixed. It doesn't, e.g. use two-level types, which would let you substitute newtypes for parts of the tree. So you would have to redefine the type of the AST down to the node you wish to change the type of.

like image 113
Don Stewart Avatar answered Nov 15 '22 06:11

Don Stewart