【问题标题】:Creating a data type that holds specific values of another data type创建包含另一种数据类型的特定值的数据类型
【发布时间】:2021-12-26 05:26:39
【问题描述】:

我想创建以下数据结构,第一个是代数数据类型 OneToTen,第二个我想成为一个列表,其中包含 OneToTen 可以用于我在程序中进行的未来映射的所有值。

data OneToTen = I | II | III | IV | V | VI | VII | VIII | IX | X
???? SetOneToTen = [I, II, III, IV, V, VI, VII, VIII, IX, X]

这在 haskell 中是否可能,或者我应该只使用一个返回上述列表的函数并使用它?

更新:我的做法很简单:

data OneToTen = I | II | III | IV | V | VI | VII | VIII | IX | X
               deriving (Enum, Show)

setOneToTen :: [OneToTen]
setOneToTen = [I .. X]

然后在需要列表时调用此函数:)

【问题讨论】:

  • 只需删除???? 并将SetOneToTen 重命名为setOneToTen。那么setOneToTen就是OneToTens的列表。

标签: list haskell types enums algebraic-data-types


【解决方案1】:

只需删除???? 并将SetOneToTen 重命名为setOneToTen

data OneToTen = I | II | III | IV | V | VI | VII | VIII | IX | X

setOneToTen = [I, II, III, IV, V, VI, VII, VIII, IX, X]

现在setOneToTenOneToTens 的列表。

如果数据类型只包含不带参数的数据构造函数,您可以轻松地将它们设为BoundedEnum 的实例,在这种情况下,您可以使用[minBound ..] 来构造可能值的列表:

data OneToTen = I | II | III | IV | V | VI | VII | VIII | IX | X deriving (Bounded, Eq, Enum)

setOneToTen = [minBound ..]

【讨论】:

  • 谢谢,应该可以正常工作,我想这是一个正常的列表:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多