>>25
ポリモルフィズムと破壊的代入が相容れないからです。
もし制限が無いと例えば

let val f = ref (fn x => x) in f := fn x => x + 1; !f "abc" end

が型チェックを通ってしまう。しかしこれを実行したら整数を取る関数に文字
列が渡され、まずい。

ということで、これを回避するための制限がvalue polymorphismです。この制
限により上の例だとfは単相型しか持てなくなり、let本体で型エラーが起きる
ので、上の例は無事弾かれます。