haskell - 有没有一种简单的方法可以将派生 Enum 的数据类型转换为列表?

标签 haskell enums algebraic-data-types

我有一段看起来像这样的代码:

data SomeData = A | B | C | D | E deriving (Show, Enum)

我希望能够轻松地将某些值映射到这些类型。说我想要 char s 映射到 SomeData类型,我可能会这样做:
mappings = zip "abcde" [A, B, C, D, E]

这将产生 [('a',A),('b',B)...]等等。我希望 Enum类型类可能允许我通过使用一些便利功能将数据类型转换为我上面描述的列表( [A, B, C, D, E] )轻松地做到这一点。

标准库中有这样的功能吗?或者如果我想使用这样的东西,我需要自己定义吗?

最佳答案

你可以更通用:

-- added deriving Bounded
data SomeData = A | B | C | D | E deriving (Show, Enum, Bounded)

fullRange :: (Bounded a, Enum a) => [a]
fullRange = enumFromTo minBound maxBound

然后调用fullRange (如果需要,使用显式类型注释:fullRange :: [SomeData])。

关于haskell - 有没有一种简单的方法可以将派生 Enum 的数据类型转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019386/

相关文章:

haskell - 数据的所有约束都可以表示为代数数据类型吗?

haskell - 将 wav 音频格式 ByteString 转换为 Floats

javascript - 生成唯一 ID 的纯函数式方法

c - 如何使用结构体中包含的枚举作为函数的参数?

haskell - 如何使函数仅可用于 ADT 的某个数据构造函数?

haskell - 将数据类型转换为映射

c# - 禁止现有类的接口(interface)实现有什么好处吗?

haskell - 模棱两可的类型变量,但不在 ghci 中?

c# - 实现 FlagsAttribute 时将 Enum 解析为 Enum

Java强制使用枚举开关从方法返回默认语句,并覆盖所有枚举值