2

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

这是一个例子:

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

为什么这里有两个BoolOpCompOp

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

4

1 回答 1

7

没错,第一个BoolOp构造函数;第二个说构造函数采用 type 的值:: BoolOp。完整类型是:

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

所以我希望周围有这样的代码:

data BoolOp = BoolAnd  |  BoolOr  |  BoolXor

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

myBoolExpr :: BoolExpr
myBoolExpr = BoolOp  BoolOr  (BoolConst True)  (BoolConst False)
于 2012-08-21T01:04:34.057 回答