parametric polymorphism

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
typing.