Skip to main content
v0.14.0

A record or struct field cannot have an open-record type with an anonymous tail

Gap​

record W { d: { x: i64, .. } } is rejected with T0032. The field's type would be existential, so two values of one nominal type could hide different rows, which does not fit a nominal type. The same applies to the anonymous splice (record W { s: Session<..> }).

Impact​

A field cannot hold an arbitrary wider record. The use is covered by a row parameter on the record, record W<row R> { d: { x: i64, ..R } }, at the cost of making W generic over the row.

Affects​

Resolution​

Accepted by RFC-0181. This would follow from an existential row (GAP-TYPES-010), not stand alone.