在Haskell中定义数据结构/类型
如何在Haskell中定义一个数据结构,这样就有了适用于结构元素的某些约束/规则,并且能够在类型中反映这一点 例如,如果我有一个由另一个类型的列表组成的类型,比如在Haskell中定义数据结构/类型,haskell,data-structures,types,Haskell,Data Structures,Types,如何在Haskell中定义一个数据结构,这样就有了适用于结构元素的某些约束/规则,并且能够在类型中反映这一点 例如,如果我有一个由另一个类型的列表组成的类型,比如 r=[x | x在sodoku示例中,创建一个具有多个构造函数的数据类型,每个构造函数表示一个“规则”或语义属性。 即 现在在一些验证函数中,您将返回一个InvalidRow,其中检测到sodoku规则的验证,以及一个ValidRow,其中检测到成功的行(或列或正方形等)。这也允许您进行模式匹配 您遇到的问题是,您没有使用类型,而是使
r=[x | x在sodoku示例中,创建一个具有多个构造函数的数据类型,每个构造函数表示一个“规则”或语义属性。 即 现在在一些验证函数中,您将返回一个
InvalidRow
,其中检测到sodoku规则的验证,以及一个ValidRow
,其中检测到成功的行(或列或正方形等)。这也允许您进行模式匹配
您遇到的问题是,您没有使用类型,而是使用值。您正在定义一个值列表,而该列表没有说明它包含的值
请注意,我使用的示例可能不是很有用,因为它不包含任何关于行位置或类似信息,但您可以自己定义它。在sodoku示例中,创建一个具有多个构造函数的数据类型,每个构造函数表示一个“规则”或语义属性。 即 现在在一些验证函数中,您将返回一个
InvalidRow
,其中检测到sodoku规则的验证,以及一个ValidRow
,其中检测到成功的行(或列或正方形等)。这也允许您进行模式匹配
您遇到的问题是,您没有使用类型,而是使用值。您正在定义一个值列表,而该列表没有说明它包含的值
请注意,我使用的示例可能不是很有用,因为它不包含任何关于行位置或类似信息,但您可以自己定义它。在某些情况下,GADT可以提供帮助。依赖类型可以做任何事情,但Haskell不支持它们(它们需要程序员付出不平凡的努力)。“需要不平凡的努力”-获得正确的程序所需的努力是恒定的。选择是努力体现在哪里:在您声明的类型中,在您编写的实现中,或者只是在您的头脑中。当然,最后一个变量是最不可重用的。在某些情况下,GADT可以提供帮助。依赖类型可以做所有事情,但Haskell不支持它们(它们需要程序员付出不平凡的努力)。“需要不平凡的努力”-获得正确的程序所需的努力是恒定的。选择是努力体现在哪里:在您声明的类型中,在您编写的实现中,或者在您的头脑中。当然,最后一个变体是最不可重用的。
data SodokuType = NotValidatedRow | InvalidRow | ValidRow