On Wed, Mar 18, 2009 at 11:49 AM, Tom.Amundsen <span dir="ltr">&lt;<a href="mailto:tomamundsen@gmail.com">tomamundsen@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Hi All,<br>
<br>
I am new to Haskell. I just started reading &quot;Real World Haskell&quot; a few days<br>
ago, so I apologize for being such a noob.<br>
<br>
But, I am curious why I see a lot of code where people do pattern matching<br>
via multiple function declarations instead of using the case ... of ...<br>
construct? For example:<br>
<br>
[code]<br>
foldl&#39; _    zero []     = zero<br>
foldl&#39; step zero (x:xs) =<br>
      let new = step zero x<br>
      in  new `seq` foldl&#39; step new xs<br>
[/code]</blockquote><div><br>Well, in this particular case, note that you have two equations written.  These equations are true of foldl&#39;, and in fact foldl&#39; is the <i>least defined</i> function satisfying these equations (see <a href="http://en.wikibooks.org/wiki/Haskell/Denotational_semantics">http://en.wikibooks.org/wiki/Haskell/Denotational_semantics</a> for the underlying theory of &quot;definedness&quot;).  It a very pretty idea.<br>
<br>However, this happy view of equations breaks down once you start using the &quot;fall through&quot; semantics, as in:<br><br>foo (x:y:xs) = x + y<br>foo xs = 0<br><br>In which the second equation does not always hold (foo [1,2,3] = 0 is false).  Because of this, I am beginning to prefer not writing functions using &quot;fall through&quot;, although occasionally it is too damned convenient to pass up.<br>
<br>Luke<br></div></div><br>