Difference between revisions of "Parametric polymorphism"

From HaskellWiki
Jump to navigation Jump to search
m (typo)
m (fixed typo; added clarification)
Line 9: Line 9:
 
</haskell>
 
</haskell>
   
which means that the function well accept ''any'' type of list and ''any'' type of function, '''provided''' the types match up. This makes <hask>map</hask> highly polymorphic, yet there is still no risk of a runtime type mismatch.
+
which means that the function will accept ''any'' type of list and ''any'' type of function, '''provided''' the types match up. (That is, the function's argument type and the list's element type match.) This makes <hask>map</hask> highly polymorphic, yet there is still no risk of a runtime type mismatch.

Revision as of 06:20, 21 May 2007

Parametric polymorphism is when a function's type signature allows various arguments to take on arbitrary types, but the types must be related to each other in some way.

For example, in Java one can write a function that accepts two arguments of any possible type. However, Haskell goes further by allowing a function to accept two arguments of any type so long as they are both the same type. For example

As a specific (and slightly more complicated) example, the well-known map function has a parametrically polymorphic type

map :: (a -> b) -> [a] -> [b]

which means that the function will accept any type of list and any type of function, provided the types match up. (That is, the function's argument type and the list's element type match.) This makes map highly polymorphic, yet there is still no risk of a runtime type mismatch.