在Haskell中定义数据结构/类型

时间:2016-05-09 12:23:09

标签: haskell data-structures types

如何在Haskell中定义数据结构,以便存在适用于结构元素的某些约束/规则,并且能够在类型中反映这一点。

例如,如果我有一个由另一种类型的列表组成的类型,请说

r = [x | x< - input,rule1,rule2,rule3]。

在这种情况下,r的类型是(x的类型)的元素列表。但通过这样说,我们放松了规则。那么如何在类型定义中保留这些额外信息呢。

为了更具体地解决我的问题,请采取sudoko案例。 sudoko的网格是行列表,而行列表又是单元格列表。但众所周知,价值,频率存在限制。但是当表达类型时,这些约束不会出现在网格和行类型的定义中。

或者这不可能吗?

感谢。

1 个答案:

答案 0 :(得分:2)

在sodoku的示例中,创建一个具有多个构造函数的数据类型,每个构造函数代表一个“规则”或语义属性。 即。

data SodokuType = NotValidatedRow | InvalidRow | ValidRow

现在在某些验证函数中,您将返回InvalidRow,其中您检测到sodoku规则的验证,并返回ValidRow,您可以在其中检测到成功的行(或列或方块等)。这也允许您进行模式匹配。

您遇到的问题是您没有使用类型,而是使用了值。您正在定义值列表,而列表没有说明它包含的值。

请注意,我使用的示例可能不是很有用,因为它不包含有关行位置或类似内容的任何信息,但您可以根据需要自行定义。