ML の型システムには 2 種類の型変数があります。多相型の型変数と単相型の型変数です。OCaml では多相型の型変数のことを単に型変数と言い、単層型の型変数のことを弱い型変数と言います。
弱い型変数が現れるプログラム例を見てみましょう。
let id x = x in id id
関数 id
のラムダ計算での表記は id id
の型も id
と同じになるように思われます。しかし、実際には id
の型は 'a -> 'a
であるのに対し、id id
の型は '_weak -> '_weak
になります。('_weak
は弱い型変数)
id id
の前半の id
を id1
、後半の id
を id2
とおきます。id1
の引数の型は 'a
であり、実引数である id2
の型は 'b -> 'b
です。整合性をとるために 'a
と 'b -> 'b
を単一化します。