Method contexts

Hannah Schroeter uk1o at rz.uni-karlsruhe.de
Sat Feb 10 13:04:33 EST 2001


Hello!

On Sat, Feb 10, 2001 at 04:15:46PM +0000, Marcin 'Qrczak' Kowalczyk wrote:
> Sat, 10 Feb 2001 16:36:52 +0100, Hannah Schroeter <uk1o at rz.uni-karlsruhe.de> pisze:

> > Somehow I don't understand this. Eq a is required for Member [a] a,

> It is not required for Member [a] a, but for the member method.

> class Member c k where
>     member :: Eq k => c -> k -> Bool

> instance Member [a] a where
>     member = flip elem

> The above class and instance should be legal. Note that Member [a] a
> holds for any a, and the type of member is
>     member :: (Member c k, Eq k) => c -> k -> Bool

Okay. However, you can use only Member [a] a with Eq a, anyway, in
this case. So you can equally say:

class Eq k => Member c k where
  member :: c -> k -> Bool

class Seq c k where -- no member superclass here
  list :: c -> [k]

I don't see any sense in having Member as superclass of Seq in
such a constellation anyway.

Kind regards,

Hannah.




More information about the Glasgow-haskell-bugs mailing list