{-# LANGUAGE PatternSynonyms, Safe #-}
module Data.Char.Card (
CardSuit(Spades, Hearts, Diamonds, Clubs)
, CardRank(Ace, R2, R3, R4, R5, R6, R7, R8, R9, R10, Jack, Knight, Queen, King)
, JokerColor(Red, Black, White)
, Trump(
Fool , Trump1, Trump2, Trump3, Trump4, Trump5, Trump6, Trump7, Trump8, Trump9
, Trump10, Trump11, Trump12, Trump13, Trump14, Trump15, Trump16, Trump17, Trump18, Trump19
, Trump20, Trump21
)
, Card(Back, Card, Joker, Trump)
, back, card, card', joker, trump
, pattern Swords, pattern Cups, pattern Pentacles, pattern Wands
, pattern Valet, pattern Bube, pattern Unter, pattern Page, pattern Fante
, pattern Chevalier, pattern Ober, pattern Ritter, pattern Cavall, pattern Cavaliere
, pattern Dame, pattern Königin, pattern Regina
, pattern Roi, pattern König, pattern Re
, pattern Childhood, pattern Youth, pattern Maturity, pattern OldAge
, pattern Morning, pattern Afternoon, pattern Evening, pattern Night
, pattern Earth, pattern Air, pattern Water, pattern Fire
, pattern Dance, pattern Shopping, pattern OpenAir, pattern VisualArts
, pattern Spring, pattern Summer, pattern Autumn, pattern Winter
, pattern Game
, pattern Collective, pattern Individual
) where
import Data.Bits(shiftL, (.|.))
import Data.Char(chr)
import Data.Char.Core(UnicodeCharacter(toUnicodeChar, fromUnicodeChar, fromUnicodeChar'), UnicodeText, mapFromEnum, mapToEnum, mapToEnumSafe)
import Test.QuickCheck.Arbitrary(Arbitrary(arbitrary), arbitraryBoundedEnum)
import Test.QuickCheck.Gen(oneof)
_suitOffset :: Int
_suitOffset :: Int
_suitOffset = Int
0x2660
data CardSuit
= Spades
| Hearts
| Diamonds
| Clubs
deriving (CardSuit
CardSuit -> CardSuit -> Bounded CardSuit
forall a. a -> a -> Bounded a
maxBound :: CardSuit
$cmaxBound :: CardSuit
minBound :: CardSuit
$cminBound :: CardSuit
Bounded, Int -> CardSuit
CardSuit -> Int
CardSuit -> [CardSuit]
CardSuit -> CardSuit
CardSuit -> CardSuit -> [CardSuit]
CardSuit -> CardSuit -> CardSuit -> [CardSuit]
(CardSuit -> CardSuit)
-> (CardSuit -> CardSuit)
-> (Int -> CardSuit)
-> (CardSuit -> Int)
-> (CardSuit -> [CardSuit])
-> (CardSuit -> CardSuit -> [CardSuit])
-> (CardSuit -> CardSuit -> [CardSuit])
-> (CardSuit -> CardSuit -> CardSuit -> [CardSuit])
-> Enum CardSuit
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: CardSuit -> CardSuit -> CardSuit -> [CardSuit]
$cenumFromThenTo :: CardSuit -> CardSuit -> CardSuit -> [CardSuit]
enumFromTo :: CardSuit -> CardSuit -> [CardSuit]
$cenumFromTo :: CardSuit -> CardSuit -> [CardSuit]
enumFromThen :: CardSuit -> CardSuit -> [CardSuit]
$cenumFromThen :: CardSuit -> CardSuit -> [CardSuit]
enumFrom :: CardSuit -> [CardSuit]
$cenumFrom :: CardSuit -> [CardSuit]
fromEnum :: CardSuit -> Int
$cfromEnum :: CardSuit -> Int
toEnum :: Int -> CardSuit
$ctoEnum :: Int -> CardSuit
pred :: CardSuit -> CardSuit
$cpred :: CardSuit -> CardSuit
succ :: CardSuit -> CardSuit
$csucc :: CardSuit -> CardSuit
Enum, CardSuit -> CardSuit -> Bool
(CardSuit -> CardSuit -> Bool)
-> (CardSuit -> CardSuit -> Bool) -> Eq CardSuit
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CardSuit -> CardSuit -> Bool
$c/= :: CardSuit -> CardSuit -> Bool
== :: CardSuit -> CardSuit -> Bool
$c== :: CardSuit -> CardSuit -> Bool
Eq, Eq CardSuit
Eq CardSuit
-> (CardSuit -> CardSuit -> Ordering)
-> (CardSuit -> CardSuit -> Bool)
-> (CardSuit -> CardSuit -> Bool)
-> (CardSuit -> CardSuit -> Bool)
-> (CardSuit -> CardSuit -> Bool)
-> (CardSuit -> CardSuit -> CardSuit)
-> (CardSuit -> CardSuit -> CardSuit)
-> Ord CardSuit
CardSuit -> CardSuit -> Bool
CardSuit -> CardSuit -> Ordering
CardSuit -> CardSuit -> CardSuit
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CardSuit -> CardSuit -> CardSuit
$cmin :: CardSuit -> CardSuit -> CardSuit
max :: CardSuit -> CardSuit -> CardSuit
$cmax :: CardSuit -> CardSuit -> CardSuit
>= :: CardSuit -> CardSuit -> Bool
$c>= :: CardSuit -> CardSuit -> Bool
> :: CardSuit -> CardSuit -> Bool
$c> :: CardSuit -> CardSuit -> Bool
<= :: CardSuit -> CardSuit -> Bool
$c<= :: CardSuit -> CardSuit -> Bool
< :: CardSuit -> CardSuit -> Bool
$c< :: CardSuit -> CardSuit -> Bool
compare :: CardSuit -> CardSuit -> Ordering
$ccompare :: CardSuit -> CardSuit -> Ordering
$cp1Ord :: Eq CardSuit
Ord, ReadPrec [CardSuit]
ReadPrec CardSuit
Int -> ReadS CardSuit
ReadS [CardSuit]
(Int -> ReadS CardSuit)
-> ReadS [CardSuit]
-> ReadPrec CardSuit
-> ReadPrec [CardSuit]
-> Read CardSuit
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CardSuit]
$creadListPrec :: ReadPrec [CardSuit]
readPrec :: ReadPrec CardSuit
$creadPrec :: ReadPrec CardSuit
readList :: ReadS [CardSuit]
$creadList :: ReadS [CardSuit]
readsPrec :: Int -> ReadS CardSuit
$creadsPrec :: Int -> ReadS CardSuit
Read, Int -> CardSuit -> ShowS
[CardSuit] -> ShowS
CardSuit -> String
(Int -> CardSuit -> ShowS)
-> (CardSuit -> String) -> ([CardSuit] -> ShowS) -> Show CardSuit
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CardSuit] -> ShowS
$cshowList :: [CardSuit] -> ShowS
show :: CardSuit -> String
$cshow :: CardSuit -> String
showsPrec :: Int -> CardSuit -> ShowS
$cshowsPrec :: Int -> CardSuit -> ShowS
Show)
data CardRank
= Ace
| R2
| R3
| R4
| R5
| R6
| R7
| R8
| R9
| R10
| Jack
| Knight
| Queen
| King
deriving (CardRank
CardRank -> CardRank -> Bounded CardRank
forall a. a -> a -> Bounded a
maxBound :: CardRank
$cmaxBound :: CardRank
minBound :: CardRank
$cminBound :: CardRank
Bounded, Int -> CardRank
CardRank -> Int
CardRank -> [CardRank]
CardRank -> CardRank
CardRank -> CardRank -> [CardRank]
CardRank -> CardRank -> CardRank -> [CardRank]
(CardRank -> CardRank)
-> (CardRank -> CardRank)
-> (Int -> CardRank)
-> (CardRank -> Int)
-> (CardRank -> [CardRank])
-> (CardRank -> CardRank -> [CardRank])
-> (CardRank -> CardRank -> [CardRank])
-> (CardRank -> CardRank -> CardRank -> [CardRank])
-> Enum CardRank
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: CardRank -> CardRank -> CardRank -> [CardRank]
$cenumFromThenTo :: CardRank -> CardRank -> CardRank -> [CardRank]
enumFromTo :: CardRank -> CardRank -> [CardRank]
$cenumFromTo :: CardRank -> CardRank -> [CardRank]
enumFromThen :: CardRank -> CardRank -> [CardRank]
$cenumFromThen :: CardRank -> CardRank -> [CardRank]
enumFrom :: CardRank -> [CardRank]
$cenumFrom :: CardRank -> [CardRank]
fromEnum :: CardRank -> Int
$cfromEnum :: CardRank -> Int
toEnum :: Int -> CardRank
$ctoEnum :: Int -> CardRank
pred :: CardRank -> CardRank
$cpred :: CardRank -> CardRank
succ :: CardRank -> CardRank
$csucc :: CardRank -> CardRank
Enum, CardRank -> CardRank -> Bool
(CardRank -> CardRank -> Bool)
-> (CardRank -> CardRank -> Bool) -> Eq CardRank
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CardRank -> CardRank -> Bool
$c/= :: CardRank -> CardRank -> Bool
== :: CardRank -> CardRank -> Bool
$c== :: CardRank -> CardRank -> Bool
Eq, Eq CardRank
Eq CardRank
-> (CardRank -> CardRank -> Ordering)
-> (CardRank -> CardRank -> Bool)
-> (CardRank -> CardRank -> Bool)
-> (CardRank -> CardRank -> Bool)
-> (CardRank -> CardRank -> Bool)
-> (CardRank -> CardRank -> CardRank)
-> (CardRank -> CardRank -> CardRank)
-> Ord CardRank
CardRank -> CardRank -> Bool
CardRank -> CardRank -> Ordering
CardRank -> CardRank -> CardRank
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CardRank -> CardRank -> CardRank
$cmin :: CardRank -> CardRank -> CardRank
max :: CardRank -> CardRank -> CardRank
$cmax :: CardRank -> CardRank -> CardRank
>= :: CardRank -> CardRank -> Bool
$c>= :: CardRank -> CardRank -> Bool
> :: CardRank -> CardRank -> Bool
$c> :: CardRank -> CardRank -> Bool
<= :: CardRank -> CardRank -> Bool
$c<= :: CardRank -> CardRank -> Bool
< :: CardRank -> CardRank -> Bool
$c< :: CardRank -> CardRank -> Bool
compare :: CardRank -> CardRank -> Ordering
$ccompare :: CardRank -> CardRank -> Ordering
$cp1Ord :: Eq CardRank
Ord, ReadPrec [CardRank]
ReadPrec CardRank
Int -> ReadS CardRank
ReadS [CardRank]
(Int -> ReadS CardRank)
-> ReadS [CardRank]
-> ReadPrec CardRank
-> ReadPrec [CardRank]
-> Read CardRank
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CardRank]
$creadListPrec :: ReadPrec [CardRank]
readPrec :: ReadPrec CardRank
$creadPrec :: ReadPrec CardRank
readList :: ReadS [CardRank]
$creadList :: ReadS [CardRank]
readsPrec :: Int -> ReadS CardRank
$creadsPrec :: Int -> ReadS CardRank
Read, Int -> CardRank -> ShowS
[CardRank] -> ShowS
CardRank -> String
(Int -> CardRank -> ShowS)
-> (CardRank -> String) -> ([CardRank] -> ShowS) -> Show CardRank
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CardRank] -> ShowS
$cshowList :: [CardRank] -> ShowS
show :: CardRank -> String
$cshow :: CardRank -> String
showsPrec :: Int -> CardRank -> ShowS
$cshowsPrec :: Int -> CardRank -> ShowS
Show)
data JokerColor
= Red
| Black
| White
deriving (JokerColor
JokerColor -> JokerColor -> Bounded JokerColor
forall a. a -> a -> Bounded a
maxBound :: JokerColor
$cmaxBound :: JokerColor
minBound :: JokerColor
$cminBound :: JokerColor
Bounded, Int -> JokerColor
JokerColor -> Int
JokerColor -> [JokerColor]
JokerColor -> JokerColor
JokerColor -> JokerColor -> [JokerColor]
JokerColor -> JokerColor -> JokerColor -> [JokerColor]
(JokerColor -> JokerColor)
-> (JokerColor -> JokerColor)
-> (Int -> JokerColor)
-> (JokerColor -> Int)
-> (JokerColor -> [JokerColor])
-> (JokerColor -> JokerColor -> [JokerColor])
-> (JokerColor -> JokerColor -> [JokerColor])
-> (JokerColor -> JokerColor -> JokerColor -> [JokerColor])
-> Enum JokerColor
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: JokerColor -> JokerColor -> JokerColor -> [JokerColor]
$cenumFromThenTo :: JokerColor -> JokerColor -> JokerColor -> [JokerColor]
enumFromTo :: JokerColor -> JokerColor -> [JokerColor]
$cenumFromTo :: JokerColor -> JokerColor -> [JokerColor]
enumFromThen :: JokerColor -> JokerColor -> [JokerColor]
$cenumFromThen :: JokerColor -> JokerColor -> [JokerColor]
enumFrom :: JokerColor -> [JokerColor]
$cenumFrom :: JokerColor -> [JokerColor]
fromEnum :: JokerColor -> Int
$cfromEnum :: JokerColor -> Int
toEnum :: Int -> JokerColor
$ctoEnum :: Int -> JokerColor
pred :: JokerColor -> JokerColor
$cpred :: JokerColor -> JokerColor
succ :: JokerColor -> JokerColor
$csucc :: JokerColor -> JokerColor
Enum, JokerColor -> JokerColor -> Bool
(JokerColor -> JokerColor -> Bool)
-> (JokerColor -> JokerColor -> Bool) -> Eq JokerColor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JokerColor -> JokerColor -> Bool
$c/= :: JokerColor -> JokerColor -> Bool
== :: JokerColor -> JokerColor -> Bool
$c== :: JokerColor -> JokerColor -> Bool
Eq, Eq JokerColor
Eq JokerColor
-> (JokerColor -> JokerColor -> Ordering)
-> (JokerColor -> JokerColor -> Bool)
-> (JokerColor -> JokerColor -> Bool)
-> (JokerColor -> JokerColor -> Bool)
-> (JokerColor -> JokerColor -> Bool)
-> (JokerColor -> JokerColor -> JokerColor)
-> (JokerColor -> JokerColor -> JokerColor)
-> Ord JokerColor
JokerColor -> JokerColor -> Bool
JokerColor -> JokerColor -> Ordering
JokerColor -> JokerColor -> JokerColor
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: JokerColor -> JokerColor -> JokerColor
$cmin :: JokerColor -> JokerColor -> JokerColor
max :: JokerColor -> JokerColor -> JokerColor
$cmax :: JokerColor -> JokerColor -> JokerColor
>= :: JokerColor -> JokerColor -> Bool
$c>= :: JokerColor -> JokerColor -> Bool
> :: JokerColor -> JokerColor -> Bool
$c> :: JokerColor -> JokerColor -> Bool
<= :: JokerColor -> JokerColor -> Bool
$c<= :: JokerColor -> JokerColor -> Bool
< :: JokerColor -> JokerColor -> Bool
$c< :: JokerColor -> JokerColor -> Bool
compare :: JokerColor -> JokerColor -> Ordering
$ccompare :: JokerColor -> JokerColor -> Ordering
$cp1Ord :: Eq JokerColor
Ord, ReadPrec [JokerColor]
ReadPrec JokerColor
Int -> ReadS JokerColor
ReadS [JokerColor]
(Int -> ReadS JokerColor)
-> ReadS [JokerColor]
-> ReadPrec JokerColor
-> ReadPrec [JokerColor]
-> Read JokerColor
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [JokerColor]
$creadListPrec :: ReadPrec [JokerColor]
readPrec :: ReadPrec JokerColor
$creadPrec :: ReadPrec JokerColor
readList :: ReadS [JokerColor]
$creadList :: ReadS [JokerColor]
readsPrec :: Int -> ReadS JokerColor
$creadsPrec :: Int -> ReadS JokerColor
Read, Int -> JokerColor -> ShowS
[JokerColor] -> ShowS
JokerColor -> String
(Int -> JokerColor -> ShowS)
-> (JokerColor -> String)
-> ([JokerColor] -> ShowS)
-> Show JokerColor
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [JokerColor] -> ShowS
$cshowList :: [JokerColor] -> ShowS
show :: JokerColor -> String
$cshow :: JokerColor -> String
showsPrec :: Int -> JokerColor -> ShowS
$cshowsPrec :: Int -> JokerColor -> ShowS
Show)
data Trump
= Fool
| Trump1
| Trump2
| Trump3
| Trump4
| Trump5
| Trump6
| Trump7
| Trump8
| Trump9
| Trump10
| Trump11
| Trump12
| Trump13
| Trump14
| Trump15
| Trump16
| Trump17
| Trump18
| Trump19
| Trump20
| Trump21
deriving (Trump
Trump -> Trump -> Bounded Trump
forall a. a -> a -> Bounded a
maxBound :: Trump
$cmaxBound :: Trump
minBound :: Trump
$cminBound :: Trump
Bounded, Int -> Trump
Trump -> Int
Trump -> [Trump]
Trump -> Trump
Trump -> Trump -> [Trump]
Trump -> Trump -> Trump -> [Trump]
(Trump -> Trump)
-> (Trump -> Trump)
-> (Int -> Trump)
-> (Trump -> Int)
-> (Trump -> [Trump])
-> (Trump -> Trump -> [Trump])
-> (Trump -> Trump -> [Trump])
-> (Trump -> Trump -> Trump -> [Trump])
-> Enum Trump
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Trump -> Trump -> Trump -> [Trump]
$cenumFromThenTo :: Trump -> Trump -> Trump -> [Trump]
enumFromTo :: Trump -> Trump -> [Trump]
$cenumFromTo :: Trump -> Trump -> [Trump]
enumFromThen :: Trump -> Trump -> [Trump]
$cenumFromThen :: Trump -> Trump -> [Trump]
enumFrom :: Trump -> [Trump]
$cenumFrom :: Trump -> [Trump]
fromEnum :: Trump -> Int
$cfromEnum :: Trump -> Int
toEnum :: Int -> Trump
$ctoEnum :: Int -> Trump
pred :: Trump -> Trump
$cpred :: Trump -> Trump
succ :: Trump -> Trump
$csucc :: Trump -> Trump
Enum, Trump -> Trump -> Bool
(Trump -> Trump -> Bool) -> (Trump -> Trump -> Bool) -> Eq Trump
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Trump -> Trump -> Bool
$c/= :: Trump -> Trump -> Bool
== :: Trump -> Trump -> Bool
$c== :: Trump -> Trump -> Bool
Eq, Eq Trump
Eq Trump
-> (Trump -> Trump -> Ordering)
-> (Trump -> Trump -> Bool)
-> (Trump -> Trump -> Bool)
-> (Trump -> Trump -> Bool)
-> (Trump -> Trump -> Bool)
-> (Trump -> Trump -> Trump)
-> (Trump -> Trump -> Trump)
-> Ord Trump
Trump -> Trump -> Bool
Trump -> Trump -> Ordering
Trump -> Trump -> Trump
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Trump -> Trump -> Trump
$cmin :: Trump -> Trump -> Trump
max :: Trump -> Trump -> Trump
$cmax :: Trump -> Trump -> Trump
>= :: Trump -> Trump -> Bool
$c>= :: Trump -> Trump -> Bool
> :: Trump -> Trump -> Bool
$c> :: Trump -> Trump -> Bool
<= :: Trump -> Trump -> Bool
$c<= :: Trump -> Trump -> Bool
< :: Trump -> Trump -> Bool
$c< :: Trump -> Trump -> Bool
compare :: Trump -> Trump -> Ordering
$ccompare :: Trump -> Trump -> Ordering
$cp1Ord :: Eq Trump
Ord, ReadPrec [Trump]
ReadPrec Trump
Int -> ReadS Trump
ReadS [Trump]
(Int -> ReadS Trump)
-> ReadS [Trump]
-> ReadPrec Trump
-> ReadPrec [Trump]
-> Read Trump
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Trump]
$creadListPrec :: ReadPrec [Trump]
readPrec :: ReadPrec Trump
$creadPrec :: ReadPrec Trump
readList :: ReadS [Trump]
$creadList :: ReadS [Trump]
readsPrec :: Int -> ReadS Trump
$creadsPrec :: Int -> ReadS Trump
Read, Int -> Trump -> ShowS
[Trump] -> ShowS
Trump -> String
(Int -> Trump -> ShowS)
-> (Trump -> String) -> ([Trump] -> ShowS) -> Show Trump
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Trump] -> ShowS
$cshowList :: [Trump] -> ShowS
show :: Trump -> String
$cshow :: Trump -> String
showsPrec :: Int -> Trump -> ShowS
$cshowsPrec :: Int -> Trump -> ShowS
Show)
data Card
= Back
| Card CardSuit CardRank
| Joker JokerColor
| Trump Trump
deriving (Card -> Card -> Bool
(Card -> Card -> Bool) -> (Card -> Card -> Bool) -> Eq Card
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Card -> Card -> Bool
$c/= :: Card -> Card -> Bool
== :: Card -> Card -> Bool
$c== :: Card -> Card -> Bool
Eq, Eq Card
Eq Card
-> (Card -> Card -> Ordering)
-> (Card -> Card -> Bool)
-> (Card -> Card -> Bool)
-> (Card -> Card -> Bool)
-> (Card -> Card -> Bool)
-> (Card -> Card -> Card)
-> (Card -> Card -> Card)
-> Ord Card
Card -> Card -> Bool
Card -> Card -> Ordering
Card -> Card -> Card
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Card -> Card -> Card
$cmin :: Card -> Card -> Card
max :: Card -> Card -> Card
$cmax :: Card -> Card -> Card
>= :: Card -> Card -> Bool
$c>= :: Card -> Card -> Bool
> :: Card -> Card -> Bool
$c> :: Card -> Card -> Bool
<= :: Card -> Card -> Bool
$c<= :: Card -> Card -> Bool
< :: Card -> Card -> Bool
$c< :: Card -> Card -> Bool
compare :: Card -> Card -> Ordering
$ccompare :: Card -> Card -> Ordering
$cp1Ord :: Eq Card
Ord, ReadPrec [Card]
ReadPrec Card
Int -> ReadS Card
ReadS [Card]
(Int -> ReadS Card)
-> ReadS [Card] -> ReadPrec Card -> ReadPrec [Card] -> Read Card
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Card]
$creadListPrec :: ReadPrec [Card]
readPrec :: ReadPrec Card
$creadPrec :: ReadPrec Card
readList :: ReadS [Card]
$creadList :: ReadS [Card]
readsPrec :: Int -> ReadS Card
$creadsPrec :: Int -> ReadS Card
Read, Int -> Card -> ShowS
[Card] -> ShowS
Card -> String
(Int -> Card -> ShowS)
-> (Card -> String) -> ([Card] -> ShowS) -> Show Card
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Card] -> ShowS
$cshowList :: [Card] -> ShowS
show :: Card -> String
$cshow :: Card -> String
showsPrec :: Int -> Card -> ShowS
$cshowsPrec :: Int -> Card -> ShowS
Show)
instance Arbitrary CardSuit where
arbitrary :: Gen CardSuit
arbitrary = Gen CardSuit
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary CardRank where
arbitrary :: Gen CardRank
arbitrary = Gen CardRank
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary JokerColor where
arbitrary :: Gen JokerColor
arbitrary = Gen JokerColor
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary Trump where
arbitrary :: Gen Trump
arbitrary = Gen Trump
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary Card where
arbitrary :: Gen Card
arbitrary = [Gen Card] -> Gen Card
forall a. [Gen a] -> Gen a
oneof [CardSuit -> CardRank -> Card
Card (CardSuit -> CardRank -> Card)
-> Gen CardSuit -> Gen (CardRank -> Card)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen CardSuit
forall a. Arbitrary a => Gen a
arbitrary Gen (CardRank -> Card) -> Gen CardRank -> Gen Card
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen CardRank
forall a. Arbitrary a => Gen a
arbitrary, Card -> Gen Card
forall (f :: * -> *) a. Applicative f => a -> f a
pure Card
Back, JokerColor -> Card
Joker (JokerColor -> Card) -> Gen JokerColor -> Gen Card
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen JokerColor
forall a. Arbitrary a => Gen a
arbitrary, Trump -> Card
Trump (Trump -> Card) -> Gen Trump -> Gen Card
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Trump
forall a. Arbitrary a => Gen a
arbitrary]
instance Bounded Card where
minBound :: Card
minBound = Card
Back
maxBound :: Card
maxBound = Trump -> Card
Trump Trump
forall a. Bounded a => a
maxBound
instance UnicodeCharacter CardSuit where
toUnicodeChar :: CardSuit -> Char
toUnicodeChar = Int -> CardSuit -> Char
forall a. Enum a => Int -> a -> Char
mapFromEnum Int
_suitOffset
fromUnicodeChar :: Char -> Maybe CardSuit
fromUnicodeChar = Int -> Char -> Maybe CardSuit
forall a. (Bounded a, Enum a) => Int -> Char -> Maybe a
mapToEnumSafe Int
_suitOffset
fromUnicodeChar' :: Char -> CardSuit
fromUnicodeChar' = Int -> Char -> CardSuit
forall a. Enum a => Int -> Char -> a
mapToEnum Int
_suitOffset
instance UnicodeText CardSuit
back :: Char
back :: Char
back = Char
'\x1f0a0'
card'
:: CardSuit
-> CardRank
-> Char
card' :: CardSuit -> CardRank -> Char
card' CardSuit
s CardRank
r = Int -> Char
chr (Int -> Int -> Int
forall a. Bits a => a -> Int -> a
shiftL (CardSuit -> Int
forall a. Enum a => a -> Int
fromEnum CardSuit
s) Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ CardRank -> Int
forall a. Enum a => a -> Int
fromEnum CardRank
r Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
0x1f0a1)
joker
:: JokerColor
-> Char
joker :: JokerColor -> Char
joker JokerColor
c = Int -> Char
chr (Int -> Int -> Int
forall a. Bits a => a -> Int -> a
shiftL (JokerColor -> Int
forall a. Enum a => a -> Int
fromEnum JokerColor
c) Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
0x1f0bf)
trump
:: Trump
-> Char
trump :: Trump -> Char
trump Trump
t = Int -> Char
chr (Int
0x1f0e0 Int -> Int -> Int
forall a. Bits a => a -> a -> a
.|. Trump -> Int
forall a. Enum a => a -> Int
fromEnum Trump
t)
card :: Card -> Char
card :: Card -> Char
card Card
Back = Char
back
card (Card CardSuit
s CardRank
r) = CardSuit -> CardRank -> Char
card' CardSuit
s CardRank
r
card (Joker JokerColor
c) = JokerColor -> Char
joker JokerColor
c
card (Trump Trump
t) = Trump -> Char
trump Trump
t
pattern Swords :: CardSuit
pattern $bSwords :: CardSuit
$mSwords :: forall r. CardSuit -> (Void# -> r) -> (Void# -> r) -> r
Swords = Spades
pattern Cups :: CardSuit
pattern $bCups :: CardSuit
$mCups :: forall r. CardSuit -> (Void# -> r) -> (Void# -> r) -> r
Cups = Hearts
pattern Pentacles :: CardSuit
pattern $bPentacles :: CardSuit
$mPentacles :: forall r. CardSuit -> (Void# -> r) -> (Void# -> r) -> r
Pentacles = Diamonds
pattern Wands :: CardSuit
pattern $bWands :: CardSuit
$mWands :: forall r. CardSuit -> (Void# -> r) -> (Void# -> r) -> r
Wands = Clubs
pattern Valet :: CardRank
pattern $bValet :: CardRank
$mValet :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Valet = Jack
pattern Bube :: CardRank
pattern $bBube :: CardRank
$mBube :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Bube = Jack
pattern Unter :: CardRank
pattern $bUnter :: CardRank
$mUnter :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Unter = Jack
pattern Page :: CardRank
pattern $bPage :: CardRank
$mPage :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Page = Jack
pattern Fante :: CardRank
pattern $bFante :: CardRank
$mFante :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Fante = Jack
pattern Chevalier :: CardRank
pattern $bChevalier :: CardRank
$mChevalier :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Chevalier = Knight
pattern Ober :: CardRank
pattern $bOber :: CardRank
$mOber :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Ober = Knight
pattern Ritter :: CardRank
pattern $bRitter :: CardRank
$mRitter :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Ritter = Knight
pattern Cavall :: CardRank
pattern $bCavall :: CardRank
$mCavall :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Cavall = Knight
pattern Cavaliere :: CardRank
pattern $bCavaliere :: CardRank
$mCavaliere :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Cavaliere = Knight
pattern Dame :: CardRank
pattern $bDame :: CardRank
$mDame :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Dame = Queen
pattern Königin :: CardRank
pattern $bKönigin :: CardRank
$mKönigin :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Königin = Queen
pattern Regina :: CardRank
pattern $bRegina :: CardRank
$mRegina :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Regina = Queen
pattern Roi :: CardRank
pattern $bRoi :: CardRank
$mRoi :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Roi = King
pattern König :: CardRank
pattern $bKönig :: CardRank
$mKönig :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
König = King
pattern Re :: CardRank
pattern $bRe :: CardRank
$mRe :: forall r. CardRank -> (Void# -> r) -> (Void# -> r) -> r
Re = King
pattern Individual :: Trump
pattern $bIndividual :: Trump
$mIndividual :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Individual = Trump1
pattern Childhood :: Trump
pattern $bChildhood :: Trump
$mChildhood :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Childhood = Trump2
pattern Youth :: Trump
pattern $bYouth :: Trump
$mYouth :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Youth = Trump3
pattern Maturity :: Trump
pattern $bMaturity :: Trump
$mMaturity :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Maturity = Trump4
pattern OldAge :: Trump
pattern $bOldAge :: Trump
$mOldAge :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
OldAge = Trump5
pattern Morning :: Trump
pattern $bMorning :: Trump
$mMorning :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Morning = Trump6
pattern Afternoon :: Trump
pattern $bAfternoon :: Trump
$mAfternoon :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Afternoon = Trump7
pattern Evening :: Trump
pattern $bEvening :: Trump
$mEvening :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Evening = Trump8
pattern Night :: Trump
pattern $bNight :: Trump
$mNight :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Night = Trump9
pattern Earth :: Trump
pattern $bEarth :: Trump
$mEarth :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Earth = Trump10
pattern Air :: Trump
pattern $bAir :: Trump
$mAir :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Air = Trump10
pattern Water :: Trump
pattern $bWater :: Trump
$mWater :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Water = Trump11
pattern Fire :: Trump
pattern $bFire :: Trump
$mFire :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Fire = Trump11
pattern Dance :: Trump
pattern $bDance :: Trump
$mDance :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Dance = Trump12
pattern Shopping :: Trump
pattern $bShopping :: Trump
$mShopping :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Shopping = Trump13
pattern OpenAir :: Trump
pattern $bOpenAir :: Trump
$mOpenAir :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
OpenAir = Trump14
pattern VisualArts :: Trump
pattern $bVisualArts :: Trump
$mVisualArts :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
VisualArts = Trump15
pattern Spring :: Trump
pattern $bSpring :: Trump
$mSpring :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Spring = Trump16
pattern Summer :: Trump
pattern $bSummer :: Trump
$mSummer :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Summer = Trump17
pattern Autumn :: Trump
pattern $bAutumn :: Trump
$mAutumn :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Autumn = Trump18
pattern Winter :: Trump
pattern $bWinter :: Trump
$mWinter :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Winter = Trump19
pattern Game :: Trump
pattern $bGame :: Trump
$mGame :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Game = Trump20
pattern Collective :: Trump
pattern $bCollective :: Trump
$mCollective :: forall r. Trump -> (Void# -> r) -> (Void# -> r) -> r
Collective = Trump21