OCaml では,違う型で再帰する多相関数を書くことが難しい. 以下のデータ型 ('a,'b) twist を考える. type ('a,'b) twist = Nil | Cons of 'a * 'b * ('b,'a) twist 例えば,次の値はデータ型 (int,bool) twist を持っている.let twist_data = Cons(1,true,Cons(false,2,Nil)) このデータ型に対し,長さ(Consの個数)を求める関数を定義してみよう.let rec length = function Nil -> 0 | Cons(a,b,rest) -> 1 + length rest 関数 length の定義は自然のように思えるが,実際には ('a,'a) twist -> int という型が推論されてしまい,上記の twist_data には適用できない.