Polymorphism

From HaskellWiki
Revision as of 16:39, 19 October 2006 by BrettGiles (talk | contribs) (Hawiki conversion)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 called polymorphic if, depending on the context where it's used, it can take on more than one type.

Various kinds of polymorphism are identified.

1. Parametric polymorphism; mostly found in functional languages 1. Inclusion polymorphism; mostly found in object oriented languages 1. Ad hoc poolymorphism; typically C++ overloading

Haskell Examples

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

foldr is a typical example of a 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 polymorphic:

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

References