A humble suggestion: Have a *lazy* &quot;to list&quot; method for your <i>lists, arrays, sets, etc.</i> and use the nice list-only version.<br><br><div class="gmail_quote">On 27 February 2010 18:11, Andrew Coppin <span dir="ltr">&lt;<a href="mailto:andrewcoppin@btinternet.com">andrewcoppin@btinternet.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">One somewhat neat thing about Haskell is that you can say<br>
<br>
 case list of<br>
   [[x], [y,_], [z,_,_]] -&gt; x + y + z<br>
   _ -&gt; 0<br>
<br>
In Java, you&#39;d have to write something like<br>
<br>
 if (list.length() == 3)<br>
 {<br>
   List t1 = <a href="http://list.at" target="_blank">list.at</a>(0);<br>
   if (t1.length() == 1)<br>
   {<br>
     int x = <a href="http://t1.at" target="_blank">t1.at</a>(0);<br>
     List t2 = <a href="http://list.at" target="_blank">list.at</a>(1);<br>
     if (t2.length() == 2)<br>
     ...<br>
<br>
I can&#39;t even be bothered to finish typing all that lot!<br>
<br>
However, as somebody pointed out, the Java version is polymorphic. Assuming that length() is defined for multiple types of container, the Java version works with lists, arrays, sets, etc. If you try to do this in Haskell, you end up with<br>

<br>
 case size c of<br>
   3 -&gt;<br>
     case (c ! 0, c ! 1, c ! 2) of<br>
       (xs, ys, zs) | size x == 1 &amp;&amp; size y == 2 &amp; size z == 3 -&gt; (xs ! 0) + (ys ! 0) + (zs ! 0)<br>
       _ -&gt; 0<br>
   _ -&gt; 0<br>
<br>
or similar. Which is shorter than Java, but nowhere near as nice as the original list-only version.<br>
<br>
Now I was under the impression that &quot;view patterns&quot; fix this problem, but it seems they don&#39;t:<br>
<br>
 case c of<br>
   (size -&gt; 3) -&gt;<br>
     case (c ! 0, c ! 1, c ! 2) of<br>
       (size -&gt; 1, size -&gt; 2, size -&gt; 3) -&gt; (c ! 0 ! 0) + (c ! 1 ! 0) + (c ! 2 ! 0)<br>
<br>
Any suggestions?<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Ozgur Akgun<br>