But then what name would they use for tuples, which are distinct from records?
sum types also have tagged and untagged variants. the untagged variants are less useful (more cumbersome) in case of sum types and hence often are not implemented in languages.
var p = (x: 1, y: 2);
var q = (u: 1, y: 2);
var f = ((int x, int y) a) => a.x + a.y;
then p == q
f(p) == 3
f(q) == 3
p.GetType() == q.GetType()
are all true, but var r = q.x;
yields the compile-time errorCS1061: '(int u, int v)' does not contain a definition for 'x' and no accessible extension method 'x' accepting a first argument of type '(int u, int v)' could be found (are you missing a using directive or an assembly reference?)
and if
dynamic d = q;
then var s = d.u;
compiles, but throwsRuntimeBinderException: 'System.ValueTuple<int,int>' does not contain a definition for 'u'
at runtime, revealing the underlying CLR type.
Not always true in C#. Tuples can have member names
https://learn.microsoft.com/en-us/dotnet/csharp/language-ref...