I was faced today with the following DUs declarations:
type Grammar = Definition list
and Definition = Def of string * Expression
and Range =
| Char of
It's used to create mutually related types. Usually in F#, you need to forward declare each type before you use it - but this isn't always possible, for example when you need to introduce a cyclic dependency on two or more types.
In your example, if you defined Definition
with type
rather than and
, you wouldn't be able to compile the definition of Grammar
, unless you switched the order in which they're defined.
The code example you've posted isn't exactly a good one, because the mutual relation isn't necessary in it - you can change the order. (Unless there were some more types defined further down which depended on the above).