Difference between revisions of "Polymorphism"

From HaskellWiki
Jump to navigation Jump to search
m (Make link pages)
(Improve wording, and add Wikipedia link.)
Line 1: Line 1:
 
[[Category:Glossary]]
 
[[Category:Glossary]]
A value is called polymorphic if, depending on the context where it's used, it can take on more than one type.
+
A value is polymorphic if, depending on the context where it's used, it can take on more than one type.
   
Various kinds of polymorphism are identified.
+
There are different kinds of polymorphism.
   
 
#[[Parametric polymorphism]]; mostly found in functional languages
 
#[[Parametric polymorphism]]; mostly found in functional languages
 
#[[Ad-hoc polymorphism]] or overloading
 
#[[Inclusion polymorphism]]; mostly found in object oriented languages
 
#[[Inclusion polymorphism]]; mostly found in object oriented languages
#[[Ad-hoc polymorphism]]; typically C++ overloading
 
   
== Haskell Examples ==
+
== Examples ==
 
<haskell>
 
<haskell>
 
foldr :: forall a b. (a -> b -> b) -> b -> [a] -> b
 
foldr :: forall a b. (a -> b -> b) -> b -> [a] -> b
 
</haskell>
 
</haskell>
<hask>foldr</hask> is a typical example of a polymorphic [[function]]. When actually used, it may take on any of a variety of types, for example:
+
<hask>foldr</hask> is a parametric polymorphic [[function]]. When actually used, it may take on any of a variety of types, for example:
 
<haskell>
 
<haskell>
 
::(Char ->Int->Int)->Int->String->Int
 
::(Char ->Int->Int)->Int->String->Int
 
::(String->String->String)->String->[String]->String
 
::(String->String->String)->String->[String]->String
 
</haskell>
 
</haskell>
An "integer literal" is polymorphic:
+
An "integer literal" is a parametric polymorphic data type:
 
<haskell>
 
<haskell>
 
1 :: forall t. (Num t) => t
 
1 :: forall t. (Num t) => t
Line 24: Line 24:
 
== References ==
 
== References ==
 
*[http://citeseer.nj.nec.com/cardelli85understanding.html On Understanding Types, Data Abstraction, and Polymorphism (1985)], by Luca Cardelli, Peter Wegner in ACM Computing Surveys.
 
*[http://citeseer.nj.nec.com/cardelli85understanding.html On Understanding Types, Data Abstraction, and Polymorphism (1985)], by Luca Cardelli, Peter Wegner in ACM Computing Surveys.
  +
  +
*[http://en.wikipedia.org/wiki/Type_polymorphism Type polymorphism] at Wikipedia

Revision as of 07:02, 6 October 2009

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