Type classes are an extension of the traditional Hindley-Milner polymorphic type system. They provide a restricted form of AdHocPolymorphism and allow to introduce overloaded functions into the HaskellLanguage.
They were introduced in the paper "How to make ad-hoc polymorphism less ad hoc" (1988, see http://citeseer.nj.nec.com/wadler88how.html) by PhilipWadler and StephenBlott?.
See http://www.haskell.org/onlinereport/decls.html#sect4.1
See HindleyMilnerTypeInference