我是Haskell的新学习者,相互递归类型的概念让我很困惑。
以下是一个例子:
data BoolExpr
= BoolConst Bool
| BoolOp BoolOp BoolExpr BoolExpr
| ConpOp CompOp IntExpr IntExpr
为什么这里有两个BoolOp
和CompOp
?
我知道第一个BoolOp
是数据构造函数,但第二个BoolOp
怎么样?
答案 0 :(得分:7)
你是对的,第一个BoolOp
是constructor;第二个说构造函数的值为:: BoolOp
。完整类型是:
BoolOp :: BoolOp -> BoolExpr -> BoolExpr -> BoolExpr
所以我希望有一些类似这样的代码:
data BoolOp = BoolAnd | BoolOr | BoolXor
所以要使用这个构造函数,你需要给它一个BoolOp
和两个BoolExpr
s:
myBoolExpr :: BoolExpr
myBoolExpr = BoolOp BoolOr (BoolConst True) (BoolConst False)