我可以使用歧视联盟的分支来指定记录类型的成员吗?
问题描述:
如何指定的Query
的成员类型,从而将其限制为Expr
的BoolExpr
?我可以使用歧视联盟的分支来指定记录类型的成员吗?
type Expr =
| BoolExpr of Expr
| ConstValue of Object
| FieldAccess of string
type Query = {
SelectList: Expr list
FilterConditions: Expr.BoolExpr list // Expr.BoolExpr - this is don't valid? why?
}
我想只有Expr
的BoolExpr
限制FilterConditions的类型。可能吗?或者我必须重新设计AST的结构?...
答
联合类型的目的是提供对不同类型的统一访问。 知道的是,你必须根据你的分析几个选项:
如果你真的觉得一个情况下对自己的生活,你可以为它创建一个类型,并在工会的情况下把它包
您可以在使用查询类型的函数中使模式匹配,并为参数使用统一的Expr类型。在这种情况下,这似乎是一件好事。
尼古拉斯,我理解你的观点。谢谢! – Pavel 2013-04-30 17:22:43