首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取类型中的值列表

获取类型中的值列表
EN

Stack Overflow用户
提问于 2016-12-17 01:56:43
回答 1查看 100关注 0票数 1

在Haskell中,是否可以动态地获取类型中的值列表?一个具体的例子是通过将每一级别和一套牌组合在一起,生成一套完整的扑克牌,以创建一张卡片列表:

代码语言:javascript
复制
data Rank = 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | J | Q | K | A
data Suit = Spades | Hearts | Diamonds | Clubs
data Card = Card Rank Suit

deck :: [Card]
deck = -- get list of ranks and suits to create a deck --

在没有硬编码值的情况下,如何实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-17 02:02:23

在这种情况下,最简单的方法是让编译器通过派生的Enum实例生成代码。

代码语言:javascript
复制
data Rank = Two | Three | Four | Five | Six | Seve | Eight | Nine | Ten | J | Q | K | A
    deriving (Show, Enum, Bounded)

data Suit = Spades | Hearts | Diamonds | Clubs
    deriving (Show, Enum, Bounded)

data Card = Card Rank Suit

deck :: [Card]
deck = do
    rank <- enumFrom minBound :: [Rank]
    suit <- enumFrom minBound :: [Suit]
    return $ Card rank suit

或者列表理解版本:

代码语言:javascript
复制
deck :: [Card]
deck = [Card rank suit | rank <- enumFrom minBound :: [Rank], suit <- enumFrom minBound :: [Suit]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41194672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档