[Haskell-cafe] Why distinct tyvars in instance declarations?

Henning Thielemann lemming at henning-thielemann.de
Sun Jun 26 13:28:25 EDT 2005


On Sun, 26 Jun 2005, Daniel Fischer wrote:

> Am Samstag, 25. Juni 2005 21:22 schrieb Josh Hoyt:
> > Hello,
> >
> > I'm a new Haskeller, and I'm running into a problem attempting to
> > declare certain types as instances. I was attempting something that's
> >
> > effectively equivalent to:
> > > class Foo a
> > >
> > > instance Foo (Either b b)
> >
> > My question is, why this restriction that the types must be distinct?
> >
> > In particular, I'd like to declare a very specific type (Either String
> > String) as an instance. What techniques can I use to accomplish this?
> >
> > Josh Hoyt
>
> I don't know, why the tyvars must be distinct in Haskell 98,

This is certainly to prevent from overlapping instances. An implementation
for general (Either a b) could also be invoked when (Either String String)
is requested.

If it is really necessary to make the Either type an instance of something
better use a data or a newtype definition.

newtype EitherString = EitherString (Either String String)

and declare an instance for EitherString.



More information about the Haskell-Cafe mailing list