module Main where
data Suit = Hearts | Diamonds | Clubs | Spades
deriving (Show)
data Rank = Ace | Pip Int | Jack | Queen | King
deriving (Show)
type Card = (Suit, Rank)
deck :: [Card]
deck = do
suit <- [Hearts, Diamonds, Clubs, Spades]
rank <- Ace : [Pip n | n <- [2..10]] ++ [Jack, Queen, King]
return (suit, rank)
main :: IO ()
main = mapM_ prettyPrint deck
prettyPrint :: Card -> IO ()
prettyPrint (s, r) =
let a = case r of
Pip n -> show n
_ -> show r
in print $ a ++ " of " ++ show s