-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | The etude of the Haskell programming -- -- poker like a JAVA @package java-poker @version 0.1.0.0 module Game.Poker.Cards -- | 4 types of card -- --
-- >>> Hearts -- Show -- Hearts ---- --
-- >>> read "Hearts" :: Suit -- Read -- Hearts ---- --
-- >>> Hearts == Hearts -- Eq -- True ---- --
-- >>> Hearts == Spades -- Eq -- False ---- --
-- >>> Hearts < Diamonds -- Ord -- True ---- --
-- >>> succ Hearts -- Enum -- Diamonds --data Suit Hearts :: Suit Diamonds :: Suit Clubs :: Suit Spades :: Suit -- | One playing card -- --
-- >>> Card 1 Hearts == Card 2 Hearts -- Eq -- False ---- --
-- >>> Card 1 Hearts < Card 2 Hearts -- Ord -- True --data Card -- | All cards -- --
-- >>> length allCards -- 52 ---- --
-- >>> take 13 $ allCards -- [H2_,H3_,H4_,H5_,H6_,H7_,H8_,H9_,H10,HJ_,HQ_,HK_,HA_] ---- --
-- >>> reverse $ take 13 $ reverse allCards -- [S2_,S3_,S4_,S5_,S6_,S7_,S8_,S9_,S10,SJ_,SQ_,SK_,SA_] --allCards :: [Card] -- | Get Suit from card -- --
-- >>> cardSuit $ Card 10 Hearts -- Hearts --cardSuit :: Card -> Suit -- | Get Suit from card -- --
-- >>> cardNumber $ Card 10 Hearts -- 10 --cardNumber :: Card -> Int -- | Stregnth of card -- --
-- >>> cardStrength . head $ allCards -- 2 --cardStrength :: Card -> Int instance GHC.Classes.Ord Game.Poker.Cards.Card instance GHC.Classes.Eq Game.Poker.Cards.Card instance GHC.Enum.Enum Game.Poker.Cards.Suit instance GHC.Classes.Ord Game.Poker.Cards.Suit instance GHC.Classes.Eq Game.Poker.Cards.Suit instance GHC.Read.Read Game.Poker.Cards.Suit instance GHC.Show.Show Game.Poker.Cards.Suit instance GHC.Show.Show Game.Poker.Cards.Card module Game.Poker.Hands -- | Constrained cards in hand -- --
-- >>> :type fromHand -- fromHand :: Hand -> [Card] --data Hand -- | Cards to Hard -- --
-- >>> toHand allCards -- Nothing ---- --
-- >>> fmap (length . fromHand) (toHand $ take 5 allCards) -- Just 5 --toHand :: [Card] -> Maybe Hand fromHand :: Hand -> [Card] -- | Detect poker hand and return strength Card -- --
-- >>> let sameNum = filter ((==14) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Hearts) . cardSuit) allCards ---- --
-- >>> pokerHand (Hand $ take 5 sameSuit) -- (StraightFlush,H6_) ---- --
-- >>> let buta = take 2 allCards ++ (take 2 $ drop 17 allCards) ++ [last allCards] -- -- >>> pokerHand (Hand buta) -- (HighCards,SA_) --pokerHand :: Hand -> (PokerHand, Card) data PokerHand -- | Check straight in Hand -- --
-- >>> straightHint $ Hand (take 5 allCards) -- Just H6_ ---- --
-- >>> straightHint $ Hand (take 5 $ drop 8 allCards) -- Just HA_ ---- --
-- >>> straightHint $ Hand (take 2 $ allCards) -- Nothing --straightHint :: Hand -> Maybe Card -- | Check flush in Hand -- --
-- >>> flushHint $ Hand (take 5 $ filter (\x -> cardSuit x == Hearts) allCards ) -- Just H6_ ---- --
-- >>> flushHint $ Hand (take 5 $ filter (\x -> cardNumber x == 2) allCards ) -- Nothing --flushHint :: Hand -> Maybe Card -- | n of Kind in Hand -- --
-- >>> let treeCards = take 3 $ filter ((==2) . cardNumber) $ allCards -- -- >>> let twoCards = take 2 $ filter ((==10) . cardNumber) $ allCards -- -- >>> let fullhouse = toHand $ treeCards ++ twoCards ---- --
-- >>> fullhouse >>= nOfKindHint 2 -- Just [[H10,D10]] ---- --
-- >>> fullhouse >>= nOfKindHint 3 -- Just [[H2_,D2_,C2_]] ---- --
-- >>> fullhouse >>= nOfKindHint 4 -- Nothing --nOfKindHint :: Int -> Hand -> Maybe [[Card]] -- | Detect StraightFlush and return strongest Card -- --
-- >>> straightFlush $ Hand (take 5 $ filter ((==Hearts) . cardSuit) allCards) -- Just (StraightFlush,H6_) ---- --
-- >>> straightFlush $ Hand (take 5 $ filter (\x -> cardSuit x == Hearts && even (cardNumber x)) allCards) -- Nothing ---- --
-- >>> let sameSuit = filter ((==Hearts) . cardSuit) allCards -- -- >>> let sameSuit' = filter ((==Spades) . cardSuit) allCards -- -- >>> straightFlush $ Hand (take 3 sameSuit ++ take 2 (drop 3 sameSuit')) -- Nothing ---- --
-- >>> straightFlush $ Hand (take 5 $ filter (even . cardNumber) allCards) -- Nothing --straightFlush :: Hand -> Maybe (PokerHand, Card) -- | Detect FourOfAKind and return strongest Card -- --
-- >>> let sameNum = filter ((==4) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Spades) . cardSuit) allCards -- -- >>> fourOfAKind $ Hand (take 4 sameNum ++ take 1 sameSuit) -- Just (FourOfAKind,S4_) ---- --
-- >>> fourOfAKind $ Hand (take 5 sameSuit) -- Nothing --fourOfAKind :: Hand -> Maybe (PokerHand, Card) -- | Detect fullHouse and return strongest Card -- --
-- >>> let sameNum = filter ((==9) . cardNumber) allCards -- -- >>> let sameNum' = filter ((==10) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Spades) . cardSuit) allCards -- -- >>> fullHouse $ Hand (take 2 sameNum ++ take 3 sameNum') -- Just (FullHouse,C10) ---- --
-- >>> fullHouse $ Hand (take 3 sameNum ++ take 2 sameNum') -- Just (FullHouse,C9_) ---- --
-- >>> fullHouse $ Hand (take 2 sameNum ++ take 3 sameSuit) -- Nothing ---- --
-- >>> fullHouse $ Hand (take 5 sameSuit) -- Nothing --fullHouse :: Hand -> Maybe (PokerHand, Card) -- | Detect Flush and return strongest Card -- --
-- >>> flush $ Hand (take 5 $ filter ((==Hearts) . cardSuit ) allCards) -- Just (Flush,H6_) ---- --
-- >>> flush $ Hand (take 5 $ filter ((<= 3) . cardNumber) allCards) -- Nothing --flush :: Hand -> Maybe (PokerHand, Card) -- | Detect Straight and return strongest Card -- --
-- >>> straight $ Hand (take 5 $ filter ((==Hearts) . cardSuit) allCards) -- Just (Straight,H6_) ---- --
-- >>> straight $ Hand (take 5 $ filter (even . cardNumber) allCards) -- Nothing --straight :: Hand -> Maybe (PokerHand, Card) -- | Detect ThreeOfAKind and return strongest Card -- --
-- >>> let sameNum = filter ((==4) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Spades) . cardSuit) allCards -- -- >>> threeOfAKind $ Hand (take 3 sameNum ++ take 2 sameSuit) -- Just (ThreeOfAKind,C4_) ---- --
-- >>> threeOfAKind $ Hand (take 5 sameSuit) -- Nothing --threeOfAKind :: Hand -> Maybe (PokerHand, Card) -- | Detect TwoPair and return strongest Card -- --
-- >>> let sameNum = filter ((==9) . cardNumber) allCards -- -- >>> let sameNum' = filter ((==10) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Spades) . cardSuit) allCards -- -- >>> twoPair $ Hand (take 2 sameNum ++ take 2 sameNum' ++ take 1 sameSuit) -- Just (TwoPair,D10) ---- --
-- >>> twoPair $ Hand (take 2 sameNum ++ take 3 sameSuit) -- Nothing ---- --
-- >>> twoPair $ Hand (take 5 sameSuit) -- Nothing --twoPair :: Hand -> Maybe (PokerHand, Card) -- | Detect onePair and return strongest Card -- --
-- >>> let sameNum = filter ((==9) . cardNumber) allCards -- -- >>> let sameSuit = filter ((==Spades) . cardSuit) allCards -- -- >>> onePair $ Hand (take 2 sameNum ++ take 3 sameSuit) -- Just (OnePair,D9_) ---- --
-- >>> onePair $ Hand (take 5 sameSuit) -- Nothing --onePair :: Hand -> Maybe (PokerHand, Card) instance GHC.Enum.Enum Game.Poker.Hands.PokerHand instance GHC.Classes.Ord Game.Poker.Hands.PokerHand instance GHC.Classes.Eq Game.Poker.Hands.PokerHand instance GHC.Read.Read Game.Poker.Hands.PokerHand instance GHC.Show.Show Game.Poker.Hands.PokerHand instance GHC.Classes.Ord Game.Poker.Hands.Hand instance GHC.Classes.Eq Game.Poker.Hands.Hand instance GHC.Show.Show Game.Poker.Hands.Hand module Game.Poker simpleGame :: IO () instance GHC.Classes.Eq Game.Poker.Player