The discriminated union syntax as defined by Microsoft documentation does not include parenthesis. The following definition allows me to use field names in the type definition and is compatible with the syntax in the documentation.
type Node<'T> = L of value:'T | N of value:'T * children:Node<'T> list
type Node<'T> = L of value:'T | N of (value:'T * children:Node<'T> list)
gives me the error:
Anonymous type variables are not permitted in this declaration
However, parenthesis are fine if I don’t use field names:
type Node<'T> = L of 'T | N of ('T * Node<'T> list)
Comments in this change request mention differences between the use of parenthesis and not but frankly, the whole discussion went over my head.
I was under the impression that I’m defining a tuple whether or not I use parenthesis, i.e. I’d expect the compiler to treat them as redundant, but there is obviously a difference.
What is it?