我有一种数据类型,我用它来表示行列和行列:
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)