I am a new learner in Haskell, the notion of Mutually recursive types confused me a lot.
Here is an example:
data BoolExpr
= BoolConst Bool
| BoolOp BoolOp BoolExpr BoolExpr
| ConpOp CompOp IntExpr IntExpr
Why here are two BoolOp and CompOp?
I know that the first BoolOp is a data constructor, but how about the second BoolOp?
BoolExpr. Am I missing something?