
Hi Ozgur, Ozgur Akgun wrote:
I can write (separately) a parser and a pretty-printer [...] Is there any work to combine the two?
Brent Yorgey wrote:
Maybe take a look at "Invertible Syntax Descriptions: Unifying Parsing and Pretty Printing" by Tillmann Rendel and Klaus Ostermann from last year's Haskell Symposium:
http://www.informatik.uni-marburg.de/~rendel/unparse/
It's a beautiful paper, and perhaps the code will work for you (although it's too bad it's not on Hackage).
Indeed, I started this project for exactly the reason Ozgur describes: I needed to duplicate a lot of information between parsers and pretty printers and was annoyed about it. With invertible syntax descriptions, I now write a single program, which looks like a combinator parser (think "Parsec"), but can work as a pretty printer, too. I just uploaded the code from the paper (and some additional combinators) to Hackage: http://hackage.haskell.org/package/partial-isomorphisms http://hackage.haskell.org/package/invertible-syntax I use this code for the implementation of some very small languages (think "lambda calculus"). This works fine. I haven't really tried it for larger languages, but we have two students here in Marburg implementing a parser for Java using the library, so we are going to have experience with larger languages in a few weeks (months?). If you give it a try, I would be happy to receive success stories, bug reports, patches, feature requests etc. I want to keep working on this, and I am open for suggestions. Tillmann