1
Fork 0
This repository has been archived on 2023-12-08. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
2022FuncProg-project2-patience/lib/CardDeck.hs

67 lines
1.4 KiB
Haskell

module CardDeck
( Card
, CardStatus(..)
, Stack
, generateDeck
, generateShuffledDeck
, showCard
, hideCard
, flipCard
) where
import Shuffle
-- Colors of cards
data CardType = Clubs
| Diamonds
| Hearts
| Spades
| NoneType
deriving (Show, Enum, Eq)
-- Values of cards
data CardValue = Ace
| Two
| Three
| Four
| Five
| Six
| Seven
| Eight
| Nine
| Ten
| Jack
| Queen
| King
| NoneValue
deriving (Show, Enum, Eq)
data CardStatus = Hidden
| Visible
deriving (Show)
-- A card has a type and a value and is either shown or hidden.
type Card = (CardType, CardValue, CardStatus)
-- A stack of cards
type Stack = [Card]
-- Generate a standard 52-card deck, given by CardValue and CardType
generateDeck :: Stack
generateDeck = [(cType, cValue, Hidden) | cType <- types, cValue <- values]
where types = init $ enumFrom Clubs
values = init $ enumFrom Ace
generateShuffledDeck :: Stack
generateShuffledDeck = shuffle generateDeck
showCard :: Card -> Card
showCard (t, v, _) = (t,v,Visible)
hideCard :: Card -> Card
hideCard (t, v, _) = (t,v,Hidden)
flipCard :: Card -> Card
flipCard c@(_, _, Visible) = hideCard c
flipCard c@(_, _, Hidden) = showCard c