[Haskell-beginners] why do classes require the type variable in type signatures?
defigueiredo at ucdavis.edu
Wed Apr 23 08:23:33 UTC 2014
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