The Free On-line Dictionary of Computing (30 December 2018):
Polymorphism was first identified by Christopher Strachey in
1967 and developed by Hindley and Milner.
For example we could specify that the argument of the "head"
function was a list without specifying a type for the elements
of the list. In Haskell we would write:
head :: [a] -> a
meaning head has type function from "list of a" to "a" where "a"
is a type variable). This is known as parametric polymorphism.
Polymorphic typing allows strong type checking as well as generic
functions. ML in 1976 was the first language with polymorphic
See also generic type variable.