Support positional/ordered and nominal/unordered data objects/records
Positional records have public "primary" constructor and the order of their properties matters. They support all features but are not extensible while keeping backwards compatibility.
Nominal records have no accessible constructor, have to be built using builder or factory methods, order of their properties does not matter, and they can be extended with additional members while keeping binary compatibility with older versions.
C# lang design discussion: https://github.com/dotnet/csharplang/blob/master/meetings/2018/LDM-2018-10-22.md#nominal-records
Maybe we can build something similar, or would hiding the constructor be enough?