<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Antoine,<div><br></div><div>Thanks for the suggestions. No sooner did I send my message than I came to the same conclusion of creating a monadic version of the combinators to simplify the migration. It actually worked out fairly well -- most of the code ported over to the monadic version unaltered. The only exception is with literal lists used by combinators such as 'sep', e.g.&nbsp;sep [...]. This&nbsp;has to become&nbsp;sep $ sequence [...] in order to convert the argument into the expected monad.&nbsp;</div><div><br></div><div>I put my code up on github&nbsp;<a href="https://github.com/warrenharris/pretty/blob/master/src/Text/PrettyPrint/Reader.hs">https://github.com/warrenharris/pretty/blob/master/src/Text/PrettyPrint/Reader.hs</a>. If you can take a look, I'd appreciate your suggestions.</div><div><br></div><div>Warren</div><div><br><div><div>On Apr 12, 2012, at 6:22 PM, Antoine Latter wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Warren,<br><br>On Thu, Apr 12, 2012 at 6:31 PM, Warren Harris &lt;<a href="mailto:warrensomebody@gmail.com">warrensomebody@gmail.com</a>&gt; wrote:<br><blockquote type="cite">I wrote a parsec parser that does symbols lookups during the parsing process (ParsecT String Store IO a). Now I'd like to write a pretty printer that does the reverse. Unfortunately there doesn't appear to be a transformer version of Text.PrettyPrint.HughesPJ. Can anyone suggest a way to do this? Thanks,<br></blockquote><br>It seems like the opposite would be a function of type 'a -&gt; Store -&gt; IO Doc'.<br><br>Maybe a function of type 'a -&gt; ReaderT Store IO Doc' could be easier<br>to work with.<br><br>If you go this route you could write a lifted versions of (&lt;&gt;), (&lt;+&gt;), hcat etc.<br><br>An example:<br><br>(&lt;&gt;) :: Applicative m =&gt; m Doc -&gt; m Doc -&gt; m Doc<br><br>I haven't tried any of this, so I'm not sure if you would get any big<br>win over just using the first suggestion (a function of type 'a -&gt;<br>Store -&gt; IO Doc') and using the stock combinators and threading the<br>store around by hand.<br><br>But do let me know if something works out.<br><br>Antoine<br></div></blockquote></div><br></div></body></html>