我是 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
和两个BoolExpr
s:
myBoolExpr :: BoolExpr
myBoolExpr = BoolOp BoolOr (BoolConst True) (BoolConst False)