
In order to avoid your duplicate code consider to define "Foo" as follows: data Foo = F FB Int data FB = Foo | Bar f (F _ n) = even n and insert the constructor "F" after the final "$" in:
print $ f $ Bar 1 print $ f $ Bar 2 print $ f $ Foo 1 print $ f $ Foo 2
HTH Christian Am 18.09.2013 16:08, schrieb TP:
Hi,
I have a question about pattern matching. Consider the following code:
------------------ data Foo = Bar Int | Foo Int
f :: Foo -> Bool f (Foo n) | even n = True | odd n = False f (Bar n) | even n = True | odd n = False
main = do
print $ f $ Bar 1 print $ f $ Bar 2 print $ f $ Foo 1 print $ f $ Foo 2 ------------------
Why is it not possible to simply write for f:
f v = case v of _ n | even n -> True _ n | odd n -> False
or
f (_ n) | even n = True | odd n = False
(in both cases we get a parse error)?
Thanks,
TP
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners