Sounds like a Maybe to me...<br><br><div class="gmail_quote">On Tue, Apr 5, 2011 at 1:41 PM, Mike Meyer <span dir="ltr">&lt;<a href="mailto:mwm@mired.org">mwm@mired.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
One of the exercises in Real World Haskell is to write a glob matcher<br>
without translating it to regular expressions. This turns out to be a<br>
lot more subtle than it looks (character classes like [!]-}] tend to<br>
break things).<br>
<br>
In doing this, I wrote a matchCharClass function for handling<br>
character classes. The initial version had type:<br>
<br>
matchCharClass :: Pattern -&gt; Char -&gt; (Bool, Pattern)<br>
<br>
I.e. - it returned rest of pattern after the char class as well as a<br>
match succeed/fail indicator. Upon reflection, I realized that only<br>
one of the two was ever used, so rewrote it to be:<br>
<br>
matchCharClass :: Pattern -&gt; Char -&gt; Either Bool Pattern<br>
<br>
This made the calling code a little larger - taking a apart tuples is<br>
a bit easier than taking apart Either&#39;s - but simplified the values<br>
being generated. I then realized that the code only used one of the<br>
Bool values: if it was True, then Pattern got used instead. So I<br>
rewrote it a third time, giving:<br>
<br>
data CharClass = Fail | Pattern String<br>
matchCharClass :: Pattern -&gt; Char -&gt; CharClass<br>
<br>
This only required minor changes to the code, but made it easy to add<br>
&quot;Error String&quot; to the CharClass datatype later. That version can be<br>
seen at <a href="http://pastebin.com/eyre8795" target="_blank">http://pastebin.com/eyre8795</a> (as always, critiques welcome).<br>
<br>
I&#39;d like to hear what more experienced haskell programmers have to say<br>
about those three ways of returning multiple values.<br>
<br>
      Thanks,<br>
      &lt;mike<br>
--<br>
Mike Meyer &lt;<a href="mailto:mwm@mired.org">mwm@mired.org</a>&gt;              <a href="http://www.mired.org/consulting.html" target="_blank">http://www.mired.org/consulting.html</a><br>
Independent Software developer/SCM consultant, email for more information.<br>
<br>
O&lt; ascii ribbon campaign - stop html mail - <a href="http://www.asciiribbon.org" target="_blank">www.asciiribbon.org</a><br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr"><div>          Alex R</div></div><br>