我有我使用的代表行的列的行和列的数据类型:声明数据类型
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数据类型定义中的不同构造函数可能“包含”一组不同的构造函数。
所以:
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)中,对象2(X a)中,对象2(Y一)和Object2(Z a)
请注意,您应该从外部加括号:目的是对表达式进行分组,而不是调用函数。即'testfunction(Row(Left c d))'。 – huon
谢谢你的评论 – Lethi