我是Haskell的新手,相互递归类型的概念使我很困惑。
这是一个例子:
data BoolExpr
= BoolConst Bool
| BoolOp BoolOp BoolExpr BoolExpr
| ConpOp CompOp IntExpr IntExpr
为什么这里有两个
BoolOp
和CompOp
?我知道第一个
BoolOp
是数据构造函数,但是第二个BoolOp
呢? 最佳答案
您是对的,第一个BoolOp
是constructor;第二个说构造函数采用:: 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/