How to make ad-hoc polymorphism less ad hoc

October 1988How to make ad-hoc polymorphism less ad hocHow to make ad-hoc polymorphism less ad hoc

The Haskell committee, unsatisfied with polymorphism in existing functional languages, sought a new approach for their new language. The answer, as it appears in Haskell 1.0, was put forth in this paper: type classes.

This research was specifically motivated by two examples: arithmetic operations and equality testing, corresponding to the Num and Eq classes respectively. Both of these classes were incorporated into Haskell and are still in use (with some additions) today.

The paper contrasts the proposed feature against two languages that existed at the time — Standard ML and Miranda — both of which have a similar syntax to Haskell and use the same Hindley/Milner type system.

To a modern Haskell user, the biggest deficiency of this initial incarnation of type classes is that it only permitted polymorphism over concrete types, not over type constructors. Once constructor classes appear eight years later in Haskell 1.3, the power of type classes will expand greatly.

Authors: Philip Wadler and Stephen Blott

Join Type Classes for courses and projects to get you started and make you an expert in FP with Haskell.