On Tue, Jun 22, 2004 at 01:29:02PM +0100, MR K P SCHUPKE wrote: > >data E a b > > = L1 { r :: a } > > | L2 { r :: a } > > | L3 { r :: a } > > | L4 { r :: a } > > | R b > > deriving Show > > How is this different from: > > data E a b = L1 a | L2 a | R b > > f g (R a) = R (g a) > f _ other = other
> Isn't this more or less what was in the original... Nope. My f has type (b -> b1) -> E a b -> E a b1 > The problem is the type: > > f :: (a->b) -> Either String a -> Either String b > > this line: f _ other = other > > says: Either String a == Either String b -- which it doesn't Record update avoids this because of the way it is translated. Basically, the result of record update is a reconstructed record, but constructors not containing updated fields are not built/copied, so they don't constrain the resulting type. See Haskell 98 Report for details. Anyway, I doubt the OP can benefit from it. > Keean. Best regards, Tom -- .signature: Too many levels of symbolic links _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe