.net F#中and关键字在歧视工会中的使用

.net F#中and关键字在歧视工会中的使用,.net,f#,functional-programming,discriminated-union,.net,F#,Functional Programming,Discriminated Union,我今天面临着以下DUs声明: type Grammar = Definition list and Definition = Def of string * Expression and Range = | Char of char | Range of char * char 为什么要在这里使用关键字和而不是类型。语法和定义需要和才能正确编译。首先列出语法类型,但取决于后面定义的类型定义。为了正确编译,它必须与和链接,告诉F#编译器类型定义是相关的 没有理由以这

我今天面临着以下DUs声明:

type Grammar = Definition list

and  Definition = Def of string * Expression

and  Range =
     | Char  of char
     | Range of char * char

为什么要在这里使用关键字
而不是
类型

语法
定义
需要
才能正确编译。首先列出
语法
类型,但取决于后面定义的类型
定义
。为了正确编译,它必须与
链接,告诉F#编译器类型定义是相关的


没有理由以这种方式声明
范围
,而应该使用
类型

声明它用于创建相互关联的类型。通常在F#中,在使用每个类型之前需要向前声明它-但这并不总是可能的,例如,当需要在两个或更多类型上引入循环依赖时

在您的示例中,如果使用
type
而不是
定义
Definition
,则无法编译
语法的定义,除非您切换了定义顺序


您发布的代码示例并不完全是一个好的示例,因为其中不需要相互关系-您可以更改顺序。(除非有更多的类型进一步定义,这取决于上述内容)。

此外,
语法可以放在
定义
声明之后,这样就没有理由对其中任何一个使用