[Haskell-cafe] Why distinct tyvars in instance declarations?
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)
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