haskell中的相互递归类型

J.L*_*J.L 2 recursion haskell

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

这是一个例子:

data BoolExpr
     = BoolConst Bool
     | BoolOp BoolOp BoolExpr BoolExpr
     | ConpOp CompOp IntExpr IntExpr
Run Code Online (Sandbox Code Playgroud)

为什么这里有两个BoolOpCompOp

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

Mat*_*ick 7

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

BoolOp :: BoolOp -> BoolExpr -> BoolExpr -> BoolExpr
Run Code Online (Sandbox Code Playgroud)

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

data BoolOp = BoolAnd  |  BoolOr  |  BoolXor
Run Code Online (Sandbox Code Playgroud)

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

myBoolExpr :: BoolExpr
myBoolExpr = BoolOp  BoolOr  (BoolConst True)  (BoolConst False)
Run Code Online (Sandbox Code Playgroud)

  • 谁写了这段代码需要选择较少混淆的名字. (6认同)