A concept first identified by Christopher Strachey
(1967) and developed by Hindley and Milner, allowing types
such as list of anything. E.g. in Haskell
length :: [a] -> Int
is a function which operates on a list of objects of any type, a (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.
Ad-hoc polymorphism (better described as overloading
) is the ability to use the same syntax for objects of different types, e.g. "+" for addition of reals and integers or "-" for unary negation or diadic subtraction. Parametric polymorphism allows the same object code for a function to handle arguments of many types but overloading only reuses syntax and requires different code to handle different types.
See also generic type variable
In object-oriented programming
, the term is used to describe a variable
that may refer to objects whose class
is not known at compile time
and which respond at run time
according to the actual class of the object to which they refer.