On Fri, Nov 16, 2012 at 5:13 PM, Christopher Howard <span dir="ltr">&lt;<a href="mailto:christopher.howard@frigidcode.com" target="_blank">christopher.howard@frigidcode.com</a>&gt;</span> wrote:<div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank you for your help. Can you elaborate a little more on your<br>
explanation? So, would &quot;a&quot; be some data type representing the atoms of<br>
the grammar? Or some kind of recursive data type that could represent<br>
any kind of valid structure? Or...?<br></blockquote><div><br></div><div>The type parameter &quot;a&quot; is the output of that particular parser. So, a parser for an integer might have type String -&gt; Integer, while a parser for some complicated data type Foo would have type String -&gt; Foo.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;ll wait until I&#39;m clear on that point before asking about how I would<br>
combine parsers. (Presumably, two combined parsers would both have to<br>
have the same &quot;a&quot; type.)<br></blockquote><div><br></div><div>Since the parsers in this scheme are just functions, there are endless ways they could be combined, and the input and output types may or may not match.</div>
<div><br></div><div>Some combinators you will probably want:</div><div><br></div><div>andThen :: Parser a -&gt; (a -&gt; Parser b) -&gt; Parser b<br></div><div>orElse :: Parser a -&gt; Parser a -&gt; Parser a</div><div><br>
</div><div>And you might also want:</div><div><br></div><div>succeedWith :: a -&gt; Parser a</div><div><br></div><div>-Karl</div></div></div>