[Haskell-beginners] why do classes require the type variable in type signatures?

Dimitri DeFigueiredo defigueiredo at ucdavis.edu
Wed Apr 23 08:23:33 UTC 2014

Hello All,

Why does this compile

class Special a where
     isSpecial :: a -> Bool

whereas, GHC 7.6 complains about this

class AlsoSpecial a where
     isAlsoSpecial :: b -> Bool

This is the error message I get:

     The class method `isAlsoSpecial'
     mentions none of the type variables of the class AlsoSpecial a
     When checking the class method:
       isAlsoSpecial :: forall b. b -> Bool
     In the class declaration for `AlsoSpecial'

My question is: Why must I use the type variable of the class 
declaration (i.e. *a*) in the type signature for the associated method? 
Is there a fundamental reason for this or is it just a GHC specific 
limitation? I didn't see a need for it when watching this video


that explains the translation that GHC does to turn type classes into core.



More information about the Beginners mailing list