У меня есть тип данных, который я использую для представления строк столбцов и столбцов строк:
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 может «содержать» другой набор конструкторов.
So:
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
Таким образом, единственными допустимыми комбинациями являются Объект1(A a) Объект1(B a) Объект1(C a) Объект1(D a), Объект2(X a), Объект2(Y a) и Объект2(Z a)
testfunction (Row (Left c d))
. - person huon   schedule 10.09.2012