Recentemente, deparei-me com este post de Brian McKenna explicando o polimorfismo de linha. Pareceu-me uma ideia maravilhosa, mas então percebi que cheira muito a polimorfismo paramétrico limitado:
Com polimorfismo de linha:
sum: {x: int, y: int | rho} -> int
function sum r = r.x + r.y
Com polimorfismo paramétrico limitado:
sum: forall a <: {x: int, y: int}. a -> int
function sum r = r.x + r.y
Alguém pode esclarecer as diferenças de polimorfismo entre essas duas abordagens?
withconstrução. Como isso não foi apresentado no artigo, tentei evitá-lo, porque confunde as coisas.
forgetoperador que registre e remova um de seus campos. Então, para digitar fun r -> forget x of r, você provavelmente também precisará de polimorfismo de linha.
let f x = x with {sum: x.a + x.b}com os dois? Se bem entendi, o polimorfismo de linha permitirá que você mantenha quaisquer campos extras noxpolimorfismo paramétrico limitado, mas não porque você quer dizer que é do tipoforall a <: {x: int, y: int}. a -> a_with_a_new_field_sume acho que não pode expressara_with_a_new_field_sum.