列の行と行の列を表すために使用しているデータ型があります。
data Object a = Row a
|Column a
data Row a = Object a
| Left(Row a)(Row a)
data Column a = Object a
| Above(Column a)(Column a)
testfunction::Object a->String
testfunction Row(Left(c)(d)) = "Recognized row"
Object データ型定義のコンストラクターが他の場所で定義されているコンストラクターを「含む」可能性があり、Object データ型定義の別のコンストラクターが別のコンストラクターのセットを「含む」可能性があることをどのように述べることができるか知りたいです。
そう:
data Object a = Object1(Set1 a)
| Object2(Set2 a)
data Set1 a = A a| B a| C a| D a
data Set2 a = X a| Y a| Z a
したがって、有効な組み合わせは、Object1(A a) Object1(B a) Object1(C a) Object1(D a)、Object2(X a)、Object2(Y a)、および Object2(Z a) のみです。