incompatible signatur syntax within instance definition

Christian Maeder maeder at
Mon Dec 8 12:43:40 EST 2003

Fergus Henderson wrote:
> I think the issue here is that in ghc (with -fglasgow-exts),
> the "a" here refers to the same type variable "a" in the
> top of the instance declaration, which has already been
> constained, and cannot be constrained again.

Is that a bug or a feature?

> With Haskell 98, it is a fresh type variable, for
> which the constraint is necessary.

Ok, if I view the local function as a new/independent function, I accept 
to add the Constraint, but that should be acceptable for ghc 
-fglasgow-exts as well (as is for hugs with extensions).

> Try renaming the type variable as "b" in the inner declaration:
> the following should work both with and without -fglasgow-exts.
>           showsl :: Show b => List b -> ShowS

Yes, this works, but I never thought that the choice of "a" or "b" would 


 >>>instance Show a => Show (List a) where
 >>>   showsPrec _  Nil = showString "[]"
 >>>   showsPrec _ l =
 >>>   showString "[" . showsl l . showString "]"
 >>>       where -- showsl :: List a -> ShowS            -- for ghc
 >>>         -- showsl :: Show a => List a -> ShowS  -- for hugs

More information about the Glasgow-haskell-users mailing list