f# - 我可以使用可区分联合的分支来指定记录类型的成员吗?

标签 f#

如何指定Query的成员FilterConditions的类型,从而通过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 的结构?...

最佳答案

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

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

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

关于f# - 我可以使用可区分联合的分支来指定记录类型的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303078/

相关文章:

events - 有没有办法在单个 [<CLIEvent>] block 中包含多个事件声明?

f# - 如何访问 protected 成员

arrays - F# - 数组 - 减去 N-1 元素

sql - 将逻辑运算符与其他中缀运算符区分开来

f# - 如何在 F# 中定义常量文字

inheritance - f# 类型提供程序继承

f# - F# 中的空合并运算符?

f# - 创建元组 pointfree

f# - F#'s "Hello, world"带有 2 个 fs 文件

来自流阅读器的 F# 懒惰评估?