Skip to content

Instantly share code, notes, and snippets.

@velengel
Last active August 29, 2015 14:26
Show Gist options
  • Save velengel/1d180d97eae025d6c9a3 to your computer and use it in GitHub Desktop.
Save velengel/1d180d97eae025d6c9a3 to your computer and use it in GitHub Desktop.
module Cards
( Suit(..)
, Card
, allCards
, cardSuit
, cardNumber) where
allCards :: [Card]
allCards = do
suit <- [Hearts ..]
num <- [2..14]
return $ Card num suit
cardSuit :: Card -> Suit
cardSuit (Card _ s) = s
cardNumber :: Card -> Int
cardNumber (Card n _) = n
data Suit = Hearts | Diamonds | Clubs | Spades
deriving(Show, Read, Eq, Ord, Enum)
data Card = Card Int Suit
deriving(Eq, Ord)
showCardNumber :: Int -> String
showCardNumber 14 = "A_"
showCardNumber 13 = "K_"
showCardNumber 12 = "Q_"
showCardNumber 11 = "J_"
showCardNumber 10 = "10"
showCardNumber x = (show $ x) ++ "_"
instance Show Card where
show (Card i Hearts) = "H" ++ showCardNumber i
show (Card i Diamonds) = "D" ++ showCardNumber i
show (Card i Clubs) = "C" ++ showCardNumber i
show (Card i Spades) = "S" ++ showCardNumber i
--allCards :: [Card]
--allCards = [ Card num suit | suit <- [Hearts ..], num <- [2..14] ]
@velengel
Copy link
Author

velengel commented Aug 4, 2015

Prelude Control.Monad> :l Hands.hs
[1 of 2] Compiling Cards ( Cards.hs, interpreted )
[2 of 2] Compiling Hands ( Hands.hs, interpreted )

Hands.hs:79:15: Not in scope: data constructor `Card'
Failed, modules loaded: Cards.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment