Polymorphism

From HaskellWiki
Revision as of 07:02, 6 October 2009 by Steve C (talk | contribs) (Improve wording, and add Wikipedia link.)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

A value is polymorphic if, depending on the context where it's used, it can take on more than one type.

There are different kinds of polymorphism.

  1. Parametric polymorphism; mostly found in functional languages
  2. Ad-hoc polymorphism or overloading
  3. Inclusion polymorphism; mostly found in object oriented languages

Examples

foldr :: forall a b. (a -> b -> b) -> b -> [a] -> b

foldr is a parametric polymorphic function. When actually used, it may take on any of a variety of types, for example:

::(Char ->Int->Int)->Int->String->Int
::(String->String->String)->String->[String]->String

An "integer literal" is a parametric polymorphic data type:

1 :: forall t. (Num t) => t

References