sudo-rushil / elm-cards / Deck

Deck types, generators, and manipulating functions

Types


type Deck

A representation of an arbitrary deck or hand of cards.


type ShuffledDeck
    = ShuffledDeck Deck

An exposed type for decks which are already shuffled.

Construction

fullSuit : Cards.Suit -> List Cards.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 : Cards.Face -> List Cards.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 ]

fullDeck : ShuffledDeck

A full 52-card deck in standard order.

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

newDeck : List Cards.Card -> ShuffledDeck

Create a ShuffledDeck out of a list of cards.

randomDeck : Random.Generator ShuffledDeck

A 52-card deck in randomly shuffled order.

type Msg = ShuffleDeck Deck
Random.generate ShuffleDeck randomDeck

Manipulation

draw : ShuffledDeck -> ( Cards.Card, ShuffledDeck )

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

appendCard : Cards.Card -> ShuffledDeck -> ShuffledDeck

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 ]

length : ShuffledDeck -> Basics.Int

Get the length of the ShuffledDeck

getCards : ShuffledDeck -> List Cards.Card

Get the internal list of cards from a ShuffledDeck

Not reccomended for direct use.

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

Map a function from cards over a ShuffledDeck.

See 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 : (Cards.Card -> Basics.Bool) -> ShuffledDeck -> ShuffledDeck

Filter a ShuffledDeck by a conditional over cards.

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

Fold a function over a ShuffledDeck from the right.

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

Fold a function over a ShuffledDeck from the left.

take : Basics.Int -> ShuffledDeck -> ShuffledDeck

Take some number of cards from the top of a ShuffledDeck