row polymorphism
Row polymorphism helps us get a structure only when it with expected properties. For example, we can have a function type: {a : A, rest : ...} -> {a : A}
, where {a = A()}
, {a = A(), b = B(), c = C()}
, and {a = A(), b = B()}
are all valid argument, but {a = B()}
, {b = B()}
, and {b = B(), c = C()}
are not.