我可以使用歧视联盟的分支来指定记录类型的成员吗?

我可以使用歧视联盟的分支来指定记录类型的成员吗?

问题描述:

如何指定的Query的成员类型,从而将其限制为ExprBoolExpr我可以使用歧视联盟的分支来指定记录类型的成员吗?

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? 
} 

我想只有ExprBoolExpr限制FilterConditions的类型。可能吗?或者我必须重新设计AST的结构?...

联合类型的目的是提供对不同类型的统一访问。 知道的是,你必须根据你的分析几个选项:

  • 如果你真的觉得一个情况下对自己的生活,你可以为它创建一个类型,并在工会的情况下把它包

  • 您可以在使用查询类型的函数中使模式匹配,并为参数使用统一的Expr类型。在这种情况下,这似乎是一件好事。

+0

尼古拉斯,我理解你的观点。谢谢! – Pavel 2013-04-30 17:22:43