haskell中的相互递归类型

时间:2012-08-21 00:43:22

标签: haskell recursion

我是Haskell的新学习者,相互递归类型的概念让我很困惑。

以下是一个例子:

data BoolExpr
     = BoolConst Bool
     | BoolOp BoolOp BoolExpr BoolExpr
     | ConpOp CompOp IntExpr IntExpr

为什么这里有两个BoolOpCompOp

我知道第一个BoolOp是数据构造函数,但第二个BoolOp怎么样?

1 个答案:

答案 0 :(得分:7)

你是对的,第一个BoolOpconstructor;第二个说构造函数的值为:: BoolOp。完整类型是:

BoolOp :: BoolOp -> BoolExpr -> BoolExpr -> BoolExpr

所以我希望有一些类似这样的代码:

data BoolOp = BoolAnd  |  BoolOr  |  BoolXor

所以要使用这个构造函数,你需要给它一个BoolOp和两个BoolExpr s:

myBoolExpr :: BoolExpr
myBoolExpr = BoolOp  BoolOr  (BoolConst True)  (BoolConst False)