我正在使用区分的并集构建表达式树。下面的代码:

type IntExpression =
    | TrueIsOne of BoolExpression

type BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool


抛出错误,因为未定义BoolExpression。交换定义只会导致相反的结果(未定义IntExpression)。

有没有解决的办法?

最佳答案

是的,使用and将具有相互依赖关系的类型定义分组:

type IntExpression =
    | TrueIsOne of BoolExpression

and BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool

10-08 00:42