<div dir="ltr">On Tue, Feb 12, 2013 at 4:38 PM, Sean Cormican <span dir="ltr">&lt;<a href="mailto:seancormican1@gmail.com" target="_blank">seancormican1@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div>name :: Expression</div></div><div>
name = ID &quot;string&quot;</div><div><br></div><div>number :: Expression</div><div>number = Num 123</div><div><br></div><div>whileParser :: Parser Expression</div><div>whileParser = whiteSpace &gt;&gt; expr8</div>
<div><br></div><div>expr8 :: Parser Expression<span style="white-space:pre-wrap">        </span></div><div>expr8 = name </div><div><span style="white-space:pre-wrap">        </span>&lt;|&gt; number</div></div></blockquote><div><br></div>
<div>You have defined name to be an Expression.  But &lt;|&gt; composes *parsers*, not expressions.  To create a Parser Expression, you would be composing (Parser Expression)s, not simply (Expression)s; so you don&#39;t want &quot;name&quot; to be simply an Expression, but a Parser that parses an input String and produces an Expression, something like</div>
<div><br></div><div>    name :: Parser Expression</div><div>    name = ID &lt;*&gt; identifier -- parse an identifier, wrap it in an ID</div><div><br></div><div>    number :: Parser Expression</div><div>    number = Num &lt;*&gt; integer -- parse an integer, wrap it in a Num</div>
<div><br></div></div>-- <br><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div>
<div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div>
</div>