我是Haskell的新学习者,相互递归类型的概念让我很困惑.
这是一个例子:
data BoolExpr
= BoolConst Bool
| BoolOp BoolOp BoolExpr BoolExpr
| ConpOp CompOp IntExpr IntExpr
Run Code Online (Sandbox Code Playgroud)
为什么这里有两个BoolOp
和CompOp
?
我知道第一个BoolOp
是数据构造函数,但第二个BoolOp
呢?
你是对的,第一个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
和两个BoolExpr
s:
myBoolExpr :: BoolExpr
myBoolExpr = BoolOp BoolOr (BoolConst True) (BoolConst False)
Run Code Online (Sandbox Code Playgroud)