module PlayCards where import Char -- ANSI code sequences esc n = "\ESC[" ++ n sgr n s = esc n ++ "m" ++ s ++ esc "0" ++ "m" red = sgr "31" black = id -- Suits, values and cards data Suit = Diamonds | Clubs | Hearts | Spades deriving (Eq, Ord, Enum, Bounded) data Value = Deuce | V3 | V4 | V5 | V6 | V7 | V8 | V9 | VX | Jack | Queen | King | Ace deriving (Eq, Ord, Enum, Bounded) data Card = Card Value Suit instance Show Value where show Ace = "A" show Jack = "J" show Queen = "Q" show King = "K" show VX = "X" show vn = show (2 + fromEnum vn) instance Show Suit where show Diamonds = "♦" show Clubs = "♣" show Hearts = "♥" show Spades = "♠" instance Show Card where show (Card v s) | s == Diamonds || s == Hearts = red (show v ++ show s) | otherwise = show v ++ show s deck = [ Card v s | v <- [Deuce .. Ace], s <- [Diamonds .. Spades] ] instance Show [Card] where show = unwords . map show