SML# - FeatureRank1Polymorphism Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

SML#では,MLの多相性がランク1多相性に拡張され,
以下のように入れ子になった多相型を推論可能である.
# fun f x y = (x, ref y);
val f = fn : ['a .'a  -> ['b .'b  -> 'a * 'b ref]]
# f 1;
val it = fn : ['a .'a  -> int * 'a ref]
この例から理解されるように,このランク1多相性への拡張によって,Standard MLの値多相性の制約が大幅に緩和されている.

さらにSML#は,このランク1多相性によって,レコード多相性などの実現に必要な型主導コンパイルのオーバーヘッドを軽減することに成功している.