Tillmann,<div><br></div><div>I&#39;ve been looking into you packages, very neat ideas and a nice implementation really.</div><div><br></div><div>I&#39;ve already implemented a toy example and it worked great. Now I am trying to use your library in a more serious piece of code, and I&#39;ve realised that defineIsomorphisms doesn&#39;t support record constructors. To be precise, you handle the case for NormalC in the code, however you do not handle RecC. I don&#39;t think this will be a difficult thing to add. Is there any reason for you not to support RecC?</div>
<div><br></div><div>Best,</div><div><br></div><div><div class="gmail_quote">2011/1/26 Tillmann Rendel <span dir="ltr">&lt;<a href="mailto:rendel@informatik.uni-marburg.de">rendel@informatik.uni-marburg.de</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Ozgur,<br>
<br>
Ozgur Akgun wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I can write (separately) a parser and a pretty-printer [...]<div class="im"><br>
Is there any work to combine the two?<br>
</div></blockquote><div class="im">
<br>
Brent Yorgey wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Maybe take a look at &quot;Invertible Syntax Descriptions: Unifying Parsing<br>
and Pretty Printing&quot; by Tillmann Rendel and Klaus Ostermann from last<br>
year&#39;s Haskell Symposium:<br>
<br>
   <a href="http://www.informatik.uni-marburg.de/~rendel/unparse/" target="_blank">http://www.informatik.uni-marburg.de/~rendel/unparse/</a><br>
<br>
It&#39;s a beautiful paper, and perhaps the code will work for you<br>
(although it&#39;s too bad it&#39;s not on Hackage).<br>
</blockquote>
<br></div>
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 &quot;Parsec&quot;), but can work as a pretty printer, too.<br>

<br>
I just uploaded the code from the paper (and some additional combinators) to Hackage:<br>
<br>
  <a href="http://hackage.haskell.org/package/partial-isomorphisms" target="_blank">http://hackage.haskell.org/package/partial-isomorphisms</a><br>
  <a href="http://hackage.haskell.org/package/invertible-syntax" target="_blank">http://hackage.haskell.org/package/invertible-syntax</a><br>
<br>
I use this code for the implementation of some very small languages (think &quot;lambda calculus&quot;). This works fine.<br>
<br>
I haven&#39;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?).<br>

<br>
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.<br><font color="#888888">
<br>
  Tillmann</font><div><div></div><div class="h5"><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Ozgur Akgun<br>
</div>