Am 08.12.2011 um 11:13 schrieb Asger Feldthaus:

> Haskell doesn't seem to support disjunctive patterns, and I'm having a 
> difficult time writing good Haskell code in situations that would otherwise 
> call for that type of pattern.
> 
> 

> In Haskell I can't find any equivalent to the disjunctive pattern. If 
> expanded naively, my Haskell version would look like this:
> 
> foo :: T -> T -> Int
> foo x y = case (x,y) of
>   (Foo a, Foo b) -> a + b
>   (Foo a, Bar b) -> a + b
>   (Bar a, Foo b) -> a + b
>   (Bar a, Bar b) -> a + b
>   (Baz, Foo a) -> -a
>   (Bar a, Baz) -> -a
>   (Baz, Bar a) -> a
>   (Foo a, Baz) -> a
>   _ -> 0
> 
> While my example is still managable in size, this quickly goes out of hand in 
> practice. I've tried using pattern guards but with limited success.

value :: T -> Int
value (Foo a) = a
value (Bar a) = a
value Baz = 0

foo :: T -> T -> Int
foo Baz (Foo a) = -a
foo (Bar a) Baz = -a
foo x y = value x + value y


_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to