| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Game.Poker.Hands
- data Hand
- toHand :: [Card] -> Maybe Hand
- fromHand :: Hand -> [Card]
- pokerHand :: Hand -> (PokerHand, Card)
- data PokerHand
- straightHint :: Hand -> Maybe Card
- flushHint :: Hand -> Maybe Card
- nOfKindHint :: Int -> Hand -> Maybe [[Card]]
- straightFlush :: Hand -> Maybe (PokerHand, Card)
- fourOfAKind :: Hand -> Maybe (PokerHand, Card)
- fullHouse :: Hand -> Maybe (PokerHand, Card)
- flush :: Hand -> Maybe (PokerHand, Card)
- straight :: Hand -> Maybe (PokerHand, Card)
- threeOfAKind :: Hand -> Maybe (PokerHand, Card)
- twoPair :: Hand -> Maybe (PokerHand, Card)
- onePair :: Hand -> Maybe (PokerHand, Card)
Documentation
Constrained cards in hand
>>>:type fromHandfromHand :: Hand -> [Card]
toHand :: [Card] -> Maybe Hand Source #
Cards to Hard
>>>toHand allCardsNothing
>>>fmap (length . fromHand) (toHand $ take 5 allCards)Just 5
pokerHand :: Hand -> (PokerHand, Card) Source #
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_)
straightHint :: Hand -> Maybe Card Source #
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
flushHint :: Hand -> Maybe Card Source #
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
nOfKindHint :: Int -> Hand -> Maybe [[Card]] Source #
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 2Just [[H10,D10]]
>>>fullhouse >>= nOfKindHint 3Just [[H2_,D2_,C2_]]
>>>fullhouse >>= nOfKindHint 4Nothing
straightFlush :: Hand -> Maybe (PokerHand, Card) Source #
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
fourOfAKind :: Hand -> Maybe (PokerHand, Card) Source #
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
fullHouse :: Hand -> Maybe (PokerHand, Card) Source #
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
flush :: Hand -> Maybe (PokerHand, Card) Source #
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
straight :: Hand -> Maybe (PokerHand, Card) Source #
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
threeOfAKind :: Hand -> Maybe (PokerHand, Card) Source #
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
twoPair :: Hand -> Maybe (PokerHand, Card) Source #
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
onePair :: Hand -> Maybe (PokerHand, Card) Source #
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