私は最近、Brian McKennaが行のポリモーフィズムを説明しているこのブログ投稿を見つけました。これは私にとっては素晴らしいアイデアのように見えましたが、その後、制限付きパラメトリック多態性のようなひどいにおいがすることに気付きました。
行ポリモーフィズムの場合:
sum: {x: int, y: int | rho} -> int
function sum r = r.x + r.y
制限付きパラメトリック多態性:
sum: forall a <: {x: int, y: int}. a -> int
function sum r = r.x + r.y
誰かがこれらの2つのアプローチの多型性の違いを明確にできますか?
with
構造の正確なセマンティクスに依存すると思います。それは記事に記載されていなかったので、混乱を招くので避けた。
forget
レコードを取得し、そのフィールドの1つを削除する演算子を使用することもできます。次に、と入力するにはfun r -> forget x of r
、おそらく行のポリモーフィズムも必要です。
let f x = x with {sum: x.a + x.b}
両方で入力してみましたか?私が正しく理解していれば、行多型は、あなたが余分なフィールドがであるものは何でも維持することができますx
が、有界パラメトリック多型は、あなたがそのタイプを持っていると言いたいと思いませんのでforall a <: {x: int, y: int}. a -> a_with_a_new_field_sum
、私はあなたが表現できるとは思いませんa_with_a_new_field_sum
。