[英]Mutually referring cases in Discriminated Unions allowed in F#?
以下歧视联盟未能编译:
type Expression =
| Identifier of string
| Integer of int
| Assignment of Identifier * Expression
显示的错误是
The type "Identifier" is not defined.
关于最后一个工会案件。
我尝试使用rec
属性标记Expression
,但这似乎无济于事。
有解决办法吗? 更好的是,引用我的麻烦的原因是什么?
听起来你真的想要
| Assignment of string * Expression
或者
type Id = Id of string
type Expression =
| Identifier of Id
| Integer of int
| Assignment of Id * Expression
如果你想要一个额外的名义类型的所有标识符。
最好在可能的情况下排除类型系统中无意义的值( 无意义的状态不应该是可表示的 ),这就是为什么如果你的语言不需要那么我会在作业的左侧避免Expression
。
在任何情况下,不允许它的原因是因为Identifier
不是一个类型( Expression
is)。
你不能这样做。 在联盟内部,您不能引用另一个Union元素。
所以它应该是:
type Expression =
| Identifier of string
| Integer of int
| Assignment of Expression * Expression
因此,当您解析赋值联合时,您可以在其中进行验证,即元组中的第一个表达式应该是标识符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.