Reputation: 4955
With Haskell's type classes it almost seems that it enables ad hoc polymorphism, but its functions declarations seem parametric polymorphism. Am I mixing my understanding of different things?
Upvotes: 26
Views: 1530
Reputation: 137937
Indeed, Haskell supports both (higher rank) parametric polymorphism, and ad hoc (or bounded) polymorphism. Parametric polymorphism in Haskell is supported via its Hindley-Milner/System F type system. Ad hoc polymorphism is supported via type classes.
For the origin of type classes and ad hoc polymorphism, see Wadler's papers:
For the origin of the distinction between parametric and ad hoc polymorphism, you can dig up Strachey's papers,
Upvotes: 32