[Haskell-cafe] What's the difference?

Krzysztof Skrzętnicki gtener at gmail.com
Tue Apr 8 17:38:21 EDT 2008


On Tue, Apr 8, 2008 at 11:05 PM, PR Stanley <prstanley at ntlworld.com> wrote:
>
>
> >
> > > What is the difference between
> > >
> > >    data T0 f a = MkT0 a
> > >    instance Eq (T0 f a) where ...
> > >
> > >        and
> > >
> > >    data T0 f a = MkT0 a
> > >    instance Eq a => Eq (T0 f a) where ...
> > >
> > The second one says that "TO f a" is only an instance of "Eq" if "a" is,
> while the first says that "TO f a" is an instance regardless of the type of
> its arguments.
> >
> >
>  More explanation please. :-)
>

Well, it's similar with functions. If we try:

foo :: a -> a -> Bool
foo x y = x < y

We'll get an error: the usage of `<` requires `a` to be in Ord class,
which we write down as type signature:

foo :: (Ord a) => a -> a -> Bool

The similar effect is for type classes. Here:
> instance Eq a => Eq (T0 f a) where ...
We can see that we can compare elements of type `a` for equality. It's
kind of saying: "if you give me an element of type `a`, and that type
is in Eq class, I can tell you how to tell equality of elements of
type T0 f a".


Regards
Christopher Skrzętnicki


More information about the Haskell-Cafe mailing list