{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, PatternSynonyms, Safe, TypeApplications #-}
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 Control.DeepSeq(NFData)
import Data.Bits(shiftL, (.|.))
import Data.Char(chr)
import Data.Char.Core(UnicodeCharacter(toUnicodeChar, fromUnicodeChar, fromUnicodeChar', isInCharRange), UnicodeText(isInTextRange), generateIsInTextRange', mapFromEnum, mapToEnum, mapToEnumSafe)
import Data.Data(Data)
import Data.Hashable(Hashable)
import GHC.Generics(Generic)
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
forall a. a -> a -> Bounded a
maxBound :: CardSuit
$cmaxBound :: CardSuit
minBound :: CardSuit
$cminBound :: CardSuit
Bounded, Typeable CardSuit
CardSuit -> DataType
CardSuit -> Constr
(forall b. Data b => b -> b) -> CardSuit -> CardSuit
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CardSuit -> u
forall u. (forall d. Data d => d -> u) -> CardSuit -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardSuit
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardSuit -> c CardSuit
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardSuit)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardSuit)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardSuit -> m CardSuit
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CardSuit -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CardSuit -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> CardSuit -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CardSuit -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardSuit -> r
gmapT :: (forall b. Data b => b -> b) -> CardSuit -> CardSuit
$cgmapT :: (forall b. Data b => b -> b) -> CardSuit -> CardSuit
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardSuit)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardSuit)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardSuit)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardSuit)
dataTypeOf :: CardSuit -> DataType
$cdataTypeOf :: CardSuit -> DataType
toConstr :: CardSuit -> Constr
$ctoConstr :: CardSuit -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardSuit
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardSuit
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardSuit -> c CardSuit
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardSuit -> c CardSuit
Data, Int -> CardSuit
CardSuit -> Int
CardSuit -> [CardSuit]
CardSuit -> CardSuit
CardSuit -> CardSuit -> [CardSuit]
CardSuit -> CardSuit -> CardSuit -> [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
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, forall x. Rep CardSuit x -> CardSuit
forall x. CardSuit -> Rep CardSuit x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CardSuit x -> CardSuit
$cfrom :: forall x. CardSuit -> Rep CardSuit x
Generic, Eq 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
Ord, ReadPrec [CardSuit]
ReadPrec CardSuit
Int -> ReadS CardSuit
ReadS [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
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)
instance Hashable CardSuit
instance NFData CardSuit
data CardRank
= Ace
| R2
| R3
| R4
| R5
| R6
| R7
| R8
| R9
| R10
| Jack
| Knight
| Queen
| King
deriving (CardRank
forall a. a -> a -> Bounded a
maxBound :: CardRank
$cmaxBound :: CardRank
minBound :: CardRank
$cminBound :: CardRank
Bounded, Typeable CardRank
CardRank -> DataType
CardRank -> Constr
(forall b. Data b => b -> b) -> CardRank -> CardRank
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CardRank -> u
forall u. (forall d. Data d => d -> u) -> CardRank -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardRank
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardRank -> c CardRank
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardRank)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardRank)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CardRank -> m CardRank
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CardRank -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CardRank -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> CardRank -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CardRank -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CardRank -> r
gmapT :: (forall b. Data b => b -> b) -> CardRank -> CardRank
$cgmapT :: (forall b. Data b => b -> b) -> CardRank -> CardRank
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardRank)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CardRank)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardRank)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CardRank)
dataTypeOf :: CardRank -> DataType
$cdataTypeOf :: CardRank -> DataType
toConstr :: CardRank -> Constr
$ctoConstr :: CardRank -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardRank
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CardRank
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardRank -> c CardRank
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CardRank -> c CardRank
Data, Int -> CardRank
CardRank -> Int
CardRank -> [CardRank]
CardRank -> CardRank
CardRank -> CardRank -> [CardRank]
CardRank -> CardRank -> CardRank -> [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
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, forall x. Rep CardRank x -> CardRank
forall x. CardRank -> Rep CardRank x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CardRank x -> CardRank
$cfrom :: forall x. CardRank -> Rep CardRank x
Generic, Eq 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
Ord, ReadPrec [CardRank]
ReadPrec CardRank
Int -> ReadS CardRank
ReadS [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
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)
instance Hashable CardRank
instance NFData CardRank
data JokerColor
= Red
| Black
| White
deriving (JokerColor
forall a. a -> a -> Bounded a
maxBound :: JokerColor
$cmaxBound :: JokerColor
minBound :: JokerColor
$cminBound :: JokerColor
Bounded, Typeable JokerColor
JokerColor -> DataType
JokerColor -> Constr
(forall b. Data b => b -> b) -> JokerColor -> JokerColor
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JokerColor -> u
forall u. (forall d. Data d => d -> u) -> JokerColor -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JokerColor
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JokerColor -> c JokerColor
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JokerColor)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JokerColor)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JokerColor -> m JokerColor
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JokerColor -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JokerColor -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> JokerColor -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JokerColor -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JokerColor -> r
gmapT :: (forall b. Data b => b -> b) -> JokerColor -> JokerColor
$cgmapT :: (forall b. Data b => b -> b) -> JokerColor -> JokerColor
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JokerColor)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JokerColor)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JokerColor)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JokerColor)
dataTypeOf :: JokerColor -> DataType
$cdataTypeOf :: JokerColor -> DataType
toConstr :: JokerColor -> Constr
$ctoConstr :: JokerColor -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JokerColor
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JokerColor
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JokerColor -> c JokerColor
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JokerColor -> c JokerColor
Data, Int -> JokerColor
JokerColor -> Int
JokerColor -> [JokerColor]
JokerColor -> JokerColor
JokerColor -> JokerColor -> [JokerColor]
JokerColor -> JokerColor -> JokerColor -> [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
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, forall x. Rep JokerColor x -> JokerColor
forall x. JokerColor -> Rep JokerColor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep JokerColor x -> JokerColor
$cfrom :: forall x. JokerColor -> Rep JokerColor x
Generic, Eq 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
Ord, ReadPrec [JokerColor]
ReadPrec JokerColor
Int -> ReadS JokerColor
ReadS [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
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)
instance Hashable JokerColor
instance NFData JokerColor
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
forall a. a -> a -> Bounded a
maxBound :: Trump
$cmaxBound :: Trump
minBound :: Trump
$cminBound :: Trump
Bounded, Typeable Trump
Trump -> DataType
Trump -> Constr
(forall b. Data b => b -> b) -> Trump -> Trump
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Trump -> u
forall u. (forall d. Data d => d -> u) -> Trump -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Trump
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Trump -> c Trump
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Trump)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Trump)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Trump -> m Trump
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Trump -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Trump -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Trump -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Trump -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Trump -> r
gmapT :: (forall b. Data b => b -> b) -> Trump -> Trump
$cgmapT :: (forall b. Data b => b -> b) -> Trump -> Trump
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Trump)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Trump)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Trump)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Trump)
dataTypeOf :: Trump -> DataType
$cdataTypeOf :: Trump -> DataType
toConstr :: Trump -> Constr
$ctoConstr :: Trump -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Trump
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Trump
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Trump -> c Trump
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Trump -> c Trump
Data, Int -> Trump
Trump -> Int
Trump -> [Trump]
Trump -> Trump
Trump -> Trump -> [Trump]
Trump -> Trump -> Trump -> [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
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, forall x. Rep Trump x -> Trump
forall x. Trump -> Rep Trump x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Trump x -> Trump
$cfrom :: forall x. Trump -> Rep Trump x
Generic, Eq 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
Ord, ReadPrec [Trump]
ReadPrec Trump
Int -> ReadS Trump
ReadS [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
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)
instance Hashable Trump
instance NFData Trump
data Card
= Back
| Card CardSuit CardRank
| Joker JokerColor
| Trump Trump
deriving (Typeable Card
Card -> DataType
Card -> Constr
(forall b. Data b => b -> b) -> Card -> Card
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Card -> u
forall u. (forall d. Data d => d -> u) -> Card -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Card -> m Card
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Card -> m Card
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Card
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Card -> c Card
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Card)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Card)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Card -> m Card
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Card -> m Card
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Card -> m Card
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Card -> m Card
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Card -> m Card
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Card -> m Card
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Card -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Card -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Card -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Card -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Card -> r
gmapT :: (forall b. Data b => b -> b) -> Card -> Card
$cgmapT :: (forall b. Data b => b -> b) -> Card -> Card
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Card)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Card)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Card)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Card)
dataTypeOf :: Card -> DataType
$cdataTypeOf :: Card -> DataType
toConstr :: Card -> Constr
$ctoConstr :: Card -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Card
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Card
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Card -> c Card
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Card -> c Card
Data, Card -> Card -> Bool
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, forall x. Rep Card x -> Card
forall x. Card -> Rep Card x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Card x -> Card
$cfrom :: forall x. Card -> Rep Card x
Generic, Eq 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
Ord, ReadPrec [Card]
ReadPrec Card
Int -> ReadS Card
ReadS [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
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 = forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary CardRank where
arbitrary :: Gen CardRank
arbitrary = forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary JokerColor where
arbitrary :: Gen JokerColor
arbitrary = forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary Trump where
arbitrary :: Gen Trump
arbitrary = forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum
instance Arbitrary Card where
arbitrary :: Gen Card
arbitrary = forall a. [Gen a] -> Gen a
oneof [CardSuit -> CardRank -> Card
Card forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Arbitrary a => Gen a
arbitrary forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Arbitrary a => Gen a
arbitrary, forall (f :: * -> *) a. Applicative f => a -> f a
pure Card
Back, JokerColor -> Card
Joker forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Arbitrary a => Gen a
arbitrary, Trump -> Card
Trump forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Arbitrary a => Gen a
arbitrary]
instance Bounded Card where
minBound :: Card
minBound = Card
Back
maxBound :: Card
maxBound = Trump -> Card
Trump forall a. Bounded a => a
maxBound
instance Hashable Card
instance NFData Card
instance UnicodeCharacter CardSuit where
toUnicodeChar :: CardSuit -> Char
toUnicodeChar = forall a. Enum a => Int -> a -> Char
mapFromEnum Int
_suitOffset
fromUnicodeChar :: Char -> Maybe CardSuit
fromUnicodeChar = forall a. (Bounded a, Enum a) => Int -> Char -> Maybe a
mapToEnumSafe Int
_suitOffset
fromUnicodeChar' :: Char -> CardSuit
fromUnicodeChar' = forall a. Enum a => Int -> Char -> a
mapToEnum Int
_suitOffset
isInCharRange :: Char -> Bool
isInCharRange Char
c = Char
'\x2660' forall a. Ord a => a -> a -> Bool
<= Char
c Bool -> Bool -> Bool
&& Char
c forall a. Ord a => a -> a -> Bool
<= Char
'\x2663'
instance UnicodeText CardSuit where
isInTextRange :: Text -> Bool
isInTextRange = forall a. UnicodeCharacter a => Text -> Bool
generateIsInTextRange' @CardSuit
back :: Char
back :: Char
back = Char
'\x1f0a0'
card'
:: CardSuit
-> CardRank
-> Char
card' :: CardSuit -> CardRank -> Char
card' CardSuit
s CardRank
r = Int -> Char
chr (forall a. Bits a => a -> Int -> a
shiftL (forall a. Enum a => a -> Int
fromEnum CardSuit
s) Int
4 forall a. Num a => a -> a -> a
+ forall a. Enum a => a -> Int
fromEnum CardRank
r forall a. Num a => a -> a -> a
+ Int
0x1f0a1)
joker
:: JokerColor
-> Char
joker :: JokerColor -> Char
joker JokerColor
c = Int -> Char
chr (forall a. Bits a => a -> Int -> a
shiftL (forall a. Enum a => a -> Int
fromEnum JokerColor
c) Int
4 forall a. Num a => a -> a -> a
+ Int
0x1f0bf)
trump
:: Trump
-> Char
trump :: Trump -> Char
trump Trump
t = Int -> Char
chr (Int
0x1f0e0 forall a. Bits a => a -> a -> a
.|. 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 -> ((# #) -> r) -> ((# #) -> r) -> r
Swords = Spades
pattern Cups :: CardSuit
pattern $bCups :: CardSuit
$mCups :: forall {r}. CardSuit -> ((# #) -> r) -> ((# #) -> r) -> r
Cups = Hearts
pattern Pentacles :: CardSuit
pattern $bPentacles :: CardSuit
$mPentacles :: forall {r}. CardSuit -> ((# #) -> r) -> ((# #) -> r) -> r
Pentacles = Diamonds
pattern Wands :: CardSuit
pattern $bWands :: CardSuit
$mWands :: forall {r}. CardSuit -> ((# #) -> r) -> ((# #) -> r) -> r
Wands = Clubs
pattern Valet :: CardRank
pattern $bValet :: CardRank
$mValet :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Valet = Jack
pattern Bube :: CardRank
pattern $bBube :: CardRank
$mBube :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Bube = Jack
pattern Unter :: CardRank
pattern $bUnter :: CardRank
$mUnter :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Unter = Jack
pattern Page :: CardRank
pattern $bPage :: CardRank
$mPage :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Page = Jack
pattern Fante :: CardRank
pattern $bFante :: CardRank
$mFante :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Fante = Jack
pattern Chevalier :: CardRank
pattern $bChevalier :: CardRank
$mChevalier :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Chevalier = Knight
pattern Ober :: CardRank
pattern $bOber :: CardRank
$mOber :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Ober = Knight
pattern Ritter :: CardRank
pattern $bRitter :: CardRank
$mRitter :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Ritter = Knight
pattern Cavall :: CardRank
pattern $bCavall :: CardRank
$mCavall :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Cavall = Knight
pattern Cavaliere :: CardRank
pattern $bCavaliere :: CardRank
$mCavaliere :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Cavaliere = Knight
pattern Dame :: CardRank
pattern $bDame :: CardRank
$mDame :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Dame = Queen
pattern Königin :: CardRank
pattern $bKönigin :: CardRank
$mKönigin :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Königin = Queen
pattern Regina :: CardRank
pattern $bRegina :: CardRank
$mRegina :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Regina = Queen
pattern Roi :: CardRank
pattern $bRoi :: CardRank
$mRoi :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Roi = King
pattern König :: CardRank
pattern $bKönig :: CardRank
$mKönig :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
König = King
pattern Re :: CardRank
pattern $bRe :: CardRank
$mRe :: forall {r}. CardRank -> ((# #) -> r) -> ((# #) -> r) -> r
Re = King
pattern Individual :: Trump
pattern $bIndividual :: Trump
$mIndividual :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Individual = Trump1
pattern Childhood :: Trump
pattern $bChildhood :: Trump
$mChildhood :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Childhood = Trump2
pattern Youth :: Trump
pattern $bYouth :: Trump
$mYouth :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Youth = Trump3
pattern Maturity :: Trump
pattern $bMaturity :: Trump
$mMaturity :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Maturity = Trump4
pattern OldAge :: Trump
pattern $bOldAge :: Trump
$mOldAge :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
OldAge = Trump5
pattern Morning :: Trump
pattern $bMorning :: Trump
$mMorning :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Morning = Trump6
pattern Afternoon :: Trump
pattern $bAfternoon :: Trump
$mAfternoon :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Afternoon = Trump7
pattern Evening :: Trump
pattern $bEvening :: Trump
$mEvening :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Evening = Trump8
pattern Night :: Trump
pattern $bNight :: Trump
$mNight :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Night = Trump9
pattern Earth :: Trump
pattern $bEarth :: Trump
$mEarth :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Earth = Trump10
pattern Air :: Trump
pattern $bAir :: Trump
$mAir :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Air = Trump10
pattern Water :: Trump
pattern $bWater :: Trump
$mWater :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Water = Trump11
pattern Fire :: Trump
pattern $bFire :: Trump
$mFire :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Fire = Trump11
pattern Dance :: Trump
pattern $bDance :: Trump
$mDance :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Dance = Trump12
pattern Shopping :: Trump
pattern $bShopping :: Trump
$mShopping :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Shopping = Trump13
pattern OpenAir :: Trump
pattern $bOpenAir :: Trump
$mOpenAir :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
OpenAir = Trump14
pattern VisualArts :: Trump
pattern $bVisualArts :: Trump
$mVisualArts :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
VisualArts = Trump15
pattern Spring :: Trump
pattern $bSpring :: Trump
$mSpring :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Spring = Trump16
pattern Summer :: Trump
pattern $bSummer :: Trump
$mSummer :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Summer = Trump17
pattern Autumn :: Trump
pattern $bAutumn :: Trump
$mAutumn :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Autumn = Trump18
pattern Winter :: Trump
pattern $bWinter :: Trump
$mWinter :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Winter = Trump19
pattern Game :: Trump
pattern $bGame :: Trump
$mGame :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Game = Trump20
pattern Collective :: Trump
pattern $bCollective :: Trump
$mCollective :: forall {r}. Trump -> ((# #) -> r) -> ((# #) -> r) -> r
Collective = Trump21