Search code examples
haskellfunctional-programmingpolymorphismtype-systems

What is Haskell's style of polymorphism?


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?


Solution

  • 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,