qualified instance declarations

Ralf Hinze ralf@informatik.uni-bonn.de
Mon, 1 Jul 2002 12:08:32 +0200


Hi,

GHC (5.03.20020410) wrongly accepts the following:

::::::::::::::
C.lhs
::::::::::::::
> module C
> where

> class A a where
>     a :: a -> Int
::::::::::::::
X.lhs
::::::::::::::
> module X
> where
> import qualified C

> instance C.A Int where
>   C.a =3D id

Note that the class method is qualified on the LHS which is
not legal H98.

---

Incidentally, I also noticed that GHC and Hugs behave differently
for the following variant of X.lhs.

::::::::::::::
X.lhs
::::::::::::::
> module X
> where
> import qualified C

> instance C.A Int where
>   a =3D const X.a

> a =3D 4

GHC happily accepts the file while Hugs complains that

ERROR "X.lhs":6 - Type error in instance member binding
*** Term           : a
*** Type           : a -> Integer
*** Does not match : Int -> Int

There seems to be a difference in defaulting. [Don't ask me
which is the correct behaviour.] The problem disappears if I
supply an explicit type signature for `a'.

Cheers, Ralf