我是 Haskell 的新手,相互递归类型的概念让我很困惑。
这是一个例子:
data BoolExpr
= BoolConst Bool
| BoolOp BoolOp BoolExpr BoolExpr
| ConpOp CompOp IntExpr IntExpr
为什么这里有两个BoolOp和CompOp?
我知道第一个BoolOp是数据构造函数,但是第二个BoolOp呢?
没错,第一个BoolOp是构造函数;第二个说构造函数采用 type 的值:: BoolOp。完整类型是:
BoolOp :: BoolOp -> BoolExpr -> BoolExpr -> BoolExpr
所以我希望周围有这样的代码:
data BoolOp = BoolAnd | BoolOr | BoolXor
所以要使用这个构造函数,你需要给它一个BoolOp和两个BoolExprs:
myBoolExpr :: BoolExpr
myBoolExpr = BoolOp BoolOr (BoolConst True) (BoolConst False)