Ocaml課題にて

Plaster氏の疑問もありちょっと考えてみた。

#let id x = x;;
#id id;;
 - : '_a -> '_a = 

ここでなぜ'_aとなってしまうのか、と言うことに関して。
例えば、以下のような場合はどうだろうか。

#let f x y = x := y;y;;
val f : 'a ref -> 'a -> 'a = 

この場合、型多相を受けて型多相を返す関数であるが、副作用を持つ。

と思ったんだが、これだと別に問題が無い気もする。あと、もうちょっと考えてみたいんだけども。