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.




module tree<Type>;
 
struct Tree
{
    Type value;
    Tree* left;
    Tree* right;
}
 
fn void Tree.replaceAll(Tree* a_tree, Type new_value)
{
    a_tree.value = new_value;
    if (a_tree.left) a_tree.left.replaceAll(new_value);
    if (a_tree.right) a_tree.right.replaceAll(new_value);
}
 