在Haskell中,是否可以动态地获取类型中的值列表?一个具体的例子是通过将每一级别和一套牌组合在一起,生成一套完整的扑克牌,以创建一张卡片列表:
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 --在没有硬编码值的情况下,如何实现这一点?
发布于 2016-12-17 02:02:23
在这种情况下,最简单的方法是让编译器通过派生的Enum实例生成代码。
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或者列表理解版本:
deck :: [Card]
deck = [Card rank suit | rank <- enumFrom minBound :: [Rank], suit <- enumFrom minBound :: [Suit]]https://stackoverflow.com/questions/41194672
复制相似问题