[Haskell-cafe] View patterns
Ozgur Akgun
ozgurakgun at gmail.com
Sat Feb 27 13:20:00 EST 2010
A humble suggestion: Have a *lazy* "to list" method for your *lists, arrays,
sets, etc.* and use the nice list-only version.
On 27 February 2010 18:11, Andrew Coppin <andrewcoppin at btinternet.com>wrote:
> One somewhat neat thing about Haskell is that you can say
>
> case list of
> [[x], [y,_], [z,_,_]] -> x + y + z
> _ -> 0
>
> In Java, you'd have to write something like
>
> if (list.length() == 3)
> {
> List t1 = list.at(0);
> if (t1.length() == 1)
> {
> int x = t1.at(0);
> List t2 = list.at(1);
> if (t2.length() == 2)
> ...
>
> I can't even be bothered to finish typing all that lot!
>
> 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
>
> case size c of
> 3 ->
> case (c ! 0, c ! 1, c ! 2) of
> (xs, ys, zs) | size x == 1 && size y == 2 & size z == 3 -> (xs ! 0) +
> (ys ! 0) + (zs ! 0)
> _ -> 0
> _ -> 0
>
> or similar. Which is shorter than Java, but nowhere near as nice as the
> original list-only version.
>
> Now I was under the impression that "view patterns" fix this problem, but
> it seems they don't:
>
> case c of
> (size -> 3) ->
> case (c ! 0, c ! 1, c ! 2) of
> (size -> 1, size -> 2, size -> 3) -> (c ! 0 ! 0) + (c ! 1 ! 0) + (c !
> 2 ! 0)
>
> Any suggestions?
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
--
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100227/09cb1ba6/attachment.html
More information about the Haskell-Cafe
mailing list