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

时间:2013-04-30 15:03:29

标签: f#

如何指定FilterConditions的成员Query的类型,从而将BoolExpr限制为Expr

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

我希望仅限BoolExpr Expr的限制类型的FilterConditions。可能吗?或者我必须重新设计AST的结构?...

1 个答案:

答案 0 :(得分:2)

联合类型的目的是提供对不同类型的统一访问。 知道了,根据您的分析,您有几个选择:

  • 如果你真的觉得有一个案例有自己的生命,你可以为它创建一个类型并将其包装在联合案例中

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