識別された組合は互いに言及することができますか?
-
27-09-2020 - |
質問
差別された組合を使用して表現ツリーを構築しています。以下のコード:
type IntExpression =
| TrueIsOne of BoolExpression
type BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
.
BOOLExpressionが定義されていないため、エラーをスローします。定義を交換するだけで、逆(Intexpressionは定義されていない)になるだけです。
これを回避する方法はありますか?
解決
はい、and
を使用して、依存関係間でタイプ定義をグループ化します。
type IntExpression =
| TrueIsOne of BoolExpression
and BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
. 他のヒント
"と"は一般的に相互依存関係を持つタイプのために機能します。つまり、MAU、クラス、レコード、および相互に再帰的な機能によって示されるように、識別されたユニオンのようなあらゆる種類のために機能します。
非末端例:
let rec foo x = bar x
and bar x = foo x
. 所属していません StackOverflow