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