我有这个(不能改变):
data Example = Value1 | Value2 | Value3
deriving (Eq, Ord, Enum, Show)我需要这个函数,它返回数据定义中所有值的列表:
examples :: [Example]但我不能使用这样的值的名称:
examples :: [Example]
examples = [Value1 ..]我试过这样的东西,但它们不起作用:
examples :: [Example]
examples = [x | x <- Example]谢谢你的帮助。
发布于 2014-09-19 00:51:12
使用toEnum 0生成第一个值,使用enumFrom生成值列表是这里没有Bounded类的唯一方法。
例:
generateEnumValues :: (Enum a) => [a]
generateEnumValues = enumFrom (toEnum 0)
examples :: [Example]
examples = generateEnumValues这种方法的主要问题是不能保证toEnum 0总是给出第一个枚举值(我在Enum docs page上没有看到任何这样的保证)。但是,对于使用deriving Enum创建的任何枚举实例,都是正确的。
因此,如果可能的话,将Bounded类添加到类型中,只需使用[minBound..]。
发布于 2014-09-19 00:14:59
派生Bounded并使用[minBound..maxBound]。
https://stackoverflow.com/questions/25924399
复制相似问题