ヴァリアントの応用:多相的ヴァリアント

多相的関数が型情報をパラメータ化できるのと同じように,ヴァリアントの定義の一部をパラメータ化することができる。

 # type 'a mylist = Nil | Cons of 'a * 'a mylist;;
 type 'a mylist = Nil | Cons of 'a * 'a mylist

'a がパラメータ化された部分。このヴァリアントは Cons の引数にどんな型でも取ることができる。たとえば整数:

 # let n1 = Cons (1, Nil);;
 val n1 : int mylist = Cons (1, Nil)
 # let n2 = Cons (2, n1);;
 val n2 : int mylist = Cons (2, Cons (1, Nil))

文字列でも:

 # let s1 = Cons ("a", Nil);;
 val s1 : string mylist = Cons ("a", Nil)
 # let s2 = Cons ("b", s1);;
 val s2 : string mylist = Cons ("b", Cons ("a", Nil))