関数型プログラミング言語ML
■ このスレッドは過去ログ倉庫に格納されています
0030デフォルトの名無しさん
NGNGポリモルフィズムと破壊的代入が相容れないからです。
もし制限が無いと例えば
let val f = ref (fn x => x) in f := fn x => x + 1; !f "abc" end
が型チェックを通ってしまう。しかしこれを実行したら整数を取る関数に文字
列が渡され、まずい。
ということで、これを回避するための制限がvalue polymorphismです。この制
限により上の例だとfは単相型しか持てなくなり、let本体で型エラーが起きる
ので、上の例は無事弾かれます。
■ このスレッドは過去ログ倉庫に格納されています