<div dir="ltr"><div>Chris I thanked in private. Perhaps I should have done that publicly; it looks like the Parsec.Expr library is exactly what I need.</div><div><br></div><div>Kim-Ee, yes, I believe that's exactly what I'm going for.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 28, 2015 at 8:07 PM, Kim-Ee Yeoh <span dir="ltr"><<a href="mailto:ky3@atamo.com" target="_blank">ky3@atamo.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><span class=""><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 28, 2015 at 2:28 PM, Jeffrey Brown <span dir="ltr"><<a href="mailto:jeffbrown.the@gmail.com" target="_blank">jeffbrown.the@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I imagine a parser that operates on (String,[String]) pairs, for which the second element allows the user to define precedence on the fly.</blockquote></div><br></div></span>Let's use the Parser newtype<br><br>newtype Parser a = Parser { parse :: String -> [(a,String)] }<br><br></div>from<br><div><br><a href="http://dev.stephendiehl.com/fun/002_parsers.html" target="_blank">http://dev.stephendiehl.com/fun/002_parsers.html</a><br><div><br></div><div>as a basis for discussion.<br><br>Now you want to "operate on (String,[String]) pairs", so the Parser newtype must now look like this:<br><br></div><div>type MyInput = (String,[String])<br><br></div><div>newtype MyParser a = MyParser { parse :: MyInput -> [(a,MyInput)] }<br><br></div><div>Is this what you have in mind?<span class="HOEnZb"><font color="#888888"><br><br>-- Kim-Ee</font></span></div><div class="gmail_extra">
</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Jeffrey Benjamin Brown</div></div>
</div>