no non-typevariable in instance declarations
Jeffrey R. Lewis
jeff@galconn.com
Tue, 14 Nov 2000 14:18:47 -0800
José Romildo Malaquias wrote:
> On Tue, Nov 14, 2000 at 05:02:30PM +0000, Malcolm Wallace wrote:
> > > class C a where
> > > ty :: a -> String
> > > instance (Num a) => C a where
> > > ty _ = "NUM"
> > > instance C Integer where
> > > ty _ = "Integer"
> >
> > > Why GHC and NHC98 are more restrictive than Hugs?
> >
> > The instances for (Num a=> a) and Integer overlap, and are therefore
> > forbidden by Haskell'98.
>
> But this is not relevant to my question. Removing the instance
> declaration
>
> instance C Integer where
> ty _ = "Integer"
>
> from the program (so that there is no instance overlapping now)
> does not help. Both GHC and NHC98 still complains with the
> same diagnostics as before. They are not accepting the
> instance declaration
>
> instance (Num a) => C a where
> ty _ = "NUM"
>
> because there is no non-type-variable component in the
> instantiated type "a" above.
>
> Again, why they have this restrictions while Hugs has not?
GHC doesn't have this restriction either, but since it's not Haskell 98,
you don't get it without some effort ;-). The following combination of
flags will convince GHC to like your program:
-fallow-overlapping-instances -fallow-undecidable-instances
--Jeff