2

如何指定成员的类型FilterConditionsQuery从而限制其成员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?
}

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

4

1 回答 1

2

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

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

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

于 2013-04-30T15:23:44.400 回答