Wolfgang Lux wrote: > Wolfgang Jeltsch wrote > > > Hello, > > say I have a type T defined the follwing way: > > newtype T a b = T (a b) > > Now I want to make every T a b with a b beeing an instance of Eq also an > > instance of Eq where (==) just test for equality of the encapsulated values. > > I > > try this > > instance Eq (a b) => Eq (T a b) where > > (T x) == (T x') = x == x' > > but it seems that this is not Haskell 98 conformant. > > You probably meant a and b being an instance of Eq,
No! Look at the definition of T. Right to the equals sign there is T (a b) which implies that a b has kind * and therefore kind (a) = kind (b) -> * if for any type t kind (t) is the kind of t. So a can never be an instance of Eq because it doesn't have kind *. Every value of type T encapsulates exactly one value which is of type a b. I want to test for equality of these values wherefore a b has to be an instance of Eq. By the way, why is (* -> *) -> * -> * the infered kind of T and not for instance ((* -> *) -> *) -> (* -> *) -> *? > so you should write it > down the same way :-) > > instance (Eq a,Eq b) => Eq (T a b) where > ... > > Wolfgang > > -- > Wolfgang Lux Phone: +49-251-83-38263 > Institut fuer Wirtschaftinformatik FAX: +49-251-83-38259 > Universitaet Muenster Email: [EMAIL PROTECTED] Wolfgang _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
