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?
With Haskell’s type classes it almost seems that it enables ad hoc polymorphism, but
Share
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,