Parametric Polymorphism
type variables


Task

Write a small example for a type declaration that is parametric over another type, together with a short bit of code (and its type signature) that uses it.



A good example is a container type, let's say a binary tree, together with some function that traverses the tree, say, a map-function that operates on every element of the tree.

This language feature only applies to statically-typed languages.




 
    namespace RosettaCode
 
    type BinaryTree<'T> = 
      | Element of 'T 
      | Tree of 'T * BinaryTree<'T> * BinaryTree<'T>
      member this.Map(f) =
        match this with
        | Element(x) -> Element(f x)
        | Tree(x,left,right) -> Tree((f x), left.Map(f), right.Map(f))
