
Dmitry Astapov wrote (on 17-10-01 11:25 +0300):
Let's say we have infamous Set class defined this way:
class Set s a where empty :: s a isEmpty :: s a -> Bool [..] instance Set IntegerSuperSet where empty = ISS (SL []) isEmpty (ISS (SL [])) = True isEmpty _ = False
gives me: Reading file "/tmp/bug.lhs": ERROR /tmp/bug.lhs:38 - Wrong number of arguments for class "Set"
Obviously I am missing something very important here. Could someone enlighten me?
First, the class declaration defines Set as having two parameters, s and a. In an instance declaration, you must supply types for both. So: instance Set IntegerSuperSet Integer where ... would be correct, except for the second problem, which is that in Set s a, s is actually type constructor (of kind * -> *), while the argument which you try to supply for s, namely IntegerSuperSet, is a type constant (of kind *). So there is a kind mismatch. Try this instead: data SuperSet a = SuperSet (SetAsList a) instance Set SuperSet a where ... -- Frank Atanassow, Information & Computing Sciences, Utrecht University Padualaan 14, PO Box 80.089, 3508 TB Utrecht, Netherlands Tel +31 (030) 253-3261 Fax +31 (030) 251-379