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 _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe