列出具有边界的haskell数据类型 [英] list data type haskell with bounds

查看:74
本文介绍了列出具有边界的haskell数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有以下表示卡的类型定义:

I have the following type definitions to represent cards:

data Suit = Hearts | Spades | Diamonds | Clubs
data Rank = Numeric Integer | Jack | Queen | King | Ace
data Card = Card Rank Suit
data Deck = None | Cons Card Deck

数字整数代表2到10的等级.

Numeric Integer represents ranks from 2 to 10.

现在,我想编写一个函数来获取完整提示:

Now I want to write a function to get the full deck:

fullDeck :: Deck

我如何以最优雅的方式生成完整的牌组?我了解其中一些定义很丑陋,但我没有选择这个自由的机会.

How could I generate the full deck in the most elegant way? I understand that some of these definitions are ugly but I have no freedom to choose this.

谢谢

推荐答案

类似

-- Not sure why you're reinventing a list but
fromList :: [Card] -> Deck
fromList = foldr Cons None

fullDeck = fromList [Card r s | s <- [Hearts, Spades, Diamonds, Clubs]
                              , r <- map Numeric [2..9]++[Jack, Queen, King, Ace]]

看起来不错吗?我们只是使用列表推导生成所有可能性的列表,而不是将其砸成Deck.

Look nice? we're just using list comprehensions to generate a list of all possibilities than smashing it into a Deck.

这篇关于列出具有边界的haskell数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆