<div>I tend to prefer where, but I think that guards &amp; function declarations&nbsp;are more readable than giant if-thens and case constructs.</div>
<div>&nbsp;</div>
<div>&quot;where&quot; can scope over multiple guards, and guards can access things declared in a&nbsp;&quot;where&quot; clause, both of which are important features:</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">f xs |&nbsp;len&nbsp;&gt;&nbsp;2&nbsp;&nbsp; = y</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| len == 1&nbsp; = 0</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| otherwise = -y</font></div>
<div><font face="courier new,monospace">&nbsp; where</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp; len = length xs</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; &nbsp;y = ...<br></font></div>
<div>compare to</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">f xs =</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; let len&nbsp;= length xs</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = ...</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp; &nbsp;in if len &gt; 2 then y</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if len == 1 then 0</font></div>
<div><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else -y</font></div>
<div><font face="courier new,monospace"></font>&nbsp;</div>
<div>The indenting hides the structure of the second function.</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp; -- ryan<br>&nbsp;</div>