sudo-rushil/elm-cards/3.2.0

Deck

Deck types, generators, and manipulating functions

Types

type Deck

A representation of an arbitrary deck or hand of cards.

= ShuffledDeck Deck

An exposed type for decks which are already shuffled.

Construction

fullSuit : Suit -> List Card

Make a deck of all the cards in a single suit.

Makes the deck in A-K order

fullSuit Spades == [ Card Spades Ace, Card Spades Two, Card Spades Three, Card Spades Four, Card Spades Five, Card Spades Six, Card Spades Seven, Card Spades Eight, Card Spades Nine, Card Spades Ten, Card Spades Jack, Card Spades Queen, Card Spades King ]
fullFace : Face -> List Card

Make a deck of all the cards for a single face.

Makes the deck in standard order.

fullFace Ace == [ Card Spades Ace, Card Diamonds Ace, Card Clubs Ace, Card Hearts Ace ]

A full 52-card deck in standard order.

fullDeck == Deck [ Card Spades Ace, Card Spades Two, ... ]

Create a ShuffledDeck out of a list of cards.

A 52-card deck in randomly shuffled order.

type Msg = ShuffleDeck Deck
Random.generate ShuffleDeck randomDeck

Manipulation

Draw a card from a ShuffledDeck.

If the deck is empty, the card returned is Back.

topCard =
    case draw (ShuffledDeck fullDeck) of
        ( top, _ ) ->
            top
topCard == Card.new "spades" 1

Add a card to the end of the deck.

appendCard (Card Spades Ace) [ Card Spades Three, Card Spades Two ] == [ Card Spades Three, Card Spades Two, Card Spades Ace ]

Get the length of the ShuffledDeck

Get the internal list of cards from a ShuffledDeck

Not reccomended for direct use.

map : (Card -> a) -> ShuffledDeck -> List a

Map a function from cards over a ShuffledDeck.

See <Games.Blackjack> for an example use of Deck.map

map (\card -> 1) <| newDeck [ Card Spades Ace, Card Heart King ] == [ 1, 1 ]


map defaultFace <| newDeck [ Card Spades Ace, Card Heart King ] == [ 1, 13 ]

Filter a ShuffledDeck by a conditional over cards.

foldr : (Card -> a -> a) -> a -> ShuffledDeck -> a

Fold a function over a ShuffledDeck from the right.

foldl : (Card -> a -> a) -> a -> ShuffledDeck -> a

Fold a function over a ShuffledDeck from the left.

Take some number of cards from the top of a ShuffledDeck