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

这是一个例子:

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

为什么这里有两个BoolOpCompOp

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

最佳答案

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

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

所以我希望周围有一些这样的代码:
data BoolOp = BoolAnd  |  BoolOr  |  BoolXor

因此,要使用此构造函数,您需要给它一个BoolOp和两个BoolExpr:
myBoolExpr :: BoolExpr
myBoolExpr = BoolOp  BoolOr  (BoolConst True)  (BoolConst False)

关于haskell - haskell中的相互递归类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12047097/

10-14 04:17