2

私はHaskellの新しい学習者であり、相互再帰型の概念は私を大いに混乱させました。

次に例を示します。

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

なぜここに2BoolOpつとCompOp

BoolOp最初のものがデータコンストラクターであることは知っていますが、2番目のものはBoolOpどうですか?

4

1 に答える 1

7

あなたは、最初のBoolOpものがコンストラクターであることは正しいです; 2つ目は、コンストラクターが型の値を取ることを示しています:: BoolOp。完全なタイプは次のとおりです。

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

だから私はこのようなコードが周りにあると思います:

data BoolOp = BoolAnd  |  BoolOr  |  BoolXor

BoolOpしたがって、このコンストラクターを使用するには、1つと2つBoolExprのsを指定する必要があります。

myBoolExpr :: BoolExpr
myBoolExpr = BoolOp  BoolOr  (BoolConst True)  (BoolConst False)
于 2012-08-21T01:04:34.057 に答える