Here's a simple example based on Either:
[[ data A = A String deriving (Show, Eq) data B = B String deriving (Show, Eq)
f :: (a->b) -> Either String a -> Either String b f g (Right a) = (Right $ g a) f g (Left s) = (Left s) -- f g (s) = (s) -- doesn't work
a2b (A s) = (B s)
t1 = f a2b (Left "x") t2 = f a2b (Right (A "y")) ]]
The second case for 'f' throws a type error when the constructor 'Left' is omitted, because the type of 's' is fixed to be Either String A when the required result (in this case, because of a2b) is Either String B.
#g
------------ Graham Klyne For email: http://www.ninebynine.org/#Contact
_______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe