module BishBosh.Rule.DrawReason(
DrawReason(),
maximumConsecutiveRepeatablePlies,
maximumConsecutiveRepeatablePositions,
byAgreement,
seventyFiveMoveRule,
insufficientMaterial,
staleMate,
fiveFoldRepetition
) where
import qualified BishBosh.Component.Move as Component.Move
import qualified BishBosh.Property.FixedMembership as Property.FixedMembership
import qualified BishBosh.Type.Count as Type.Count
import qualified Control.DeepSeq
data DrawReason
= ByAgreement
| FiftyMoveRule
| SeventyFiveMoveRule
| InsufficientMaterial
| StaleMate
| ThreeFoldRepetition
| FiveFoldRepetition
deriving (DrawReason -> DrawReason -> Bool
(DrawReason -> DrawReason -> Bool)
-> (DrawReason -> DrawReason -> Bool) -> Eq DrawReason
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DrawReason -> DrawReason -> Bool
$c/= :: DrawReason -> DrawReason -> Bool
== :: DrawReason -> DrawReason -> Bool
$c== :: DrawReason -> DrawReason -> Bool
Eq, Eq DrawReason
Eq DrawReason
-> (DrawReason -> DrawReason -> Ordering)
-> (DrawReason -> DrawReason -> Bool)
-> (DrawReason -> DrawReason -> Bool)
-> (DrawReason -> DrawReason -> Bool)
-> (DrawReason -> DrawReason -> Bool)
-> (DrawReason -> DrawReason -> DrawReason)
-> (DrawReason -> DrawReason -> DrawReason)
-> Ord DrawReason
DrawReason -> DrawReason -> Bool
DrawReason -> DrawReason -> Ordering
DrawReason -> DrawReason -> DrawReason
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 :: DrawReason -> DrawReason -> DrawReason
$cmin :: DrawReason -> DrawReason -> DrawReason
max :: DrawReason -> DrawReason -> DrawReason
$cmax :: DrawReason -> DrawReason -> DrawReason
>= :: DrawReason -> DrawReason -> Bool
$c>= :: DrawReason -> DrawReason -> Bool
> :: DrawReason -> DrawReason -> Bool
$c> :: DrawReason -> DrawReason -> Bool
<= :: DrawReason -> DrawReason -> Bool
$c<= :: DrawReason -> DrawReason -> Bool
< :: DrawReason -> DrawReason -> Bool
$c< :: DrawReason -> DrawReason -> Bool
compare :: DrawReason -> DrawReason -> Ordering
$ccompare :: DrawReason -> DrawReason -> Ordering
$cp1Ord :: Eq DrawReason
Ord, ReadPrec [DrawReason]
ReadPrec DrawReason
Int -> ReadS DrawReason
ReadS [DrawReason]
(Int -> ReadS DrawReason)
-> ReadS [DrawReason]
-> ReadPrec DrawReason
-> ReadPrec [DrawReason]
-> Read DrawReason
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DrawReason]
$creadListPrec :: ReadPrec [DrawReason]
readPrec :: ReadPrec DrawReason
$creadPrec :: ReadPrec DrawReason
readList :: ReadS [DrawReason]
$creadList :: ReadS [DrawReason]
readsPrec :: Int -> ReadS DrawReason
$creadsPrec :: Int -> ReadS DrawReason
Read, Int -> DrawReason -> ShowS
[DrawReason] -> ShowS
DrawReason -> String
(Int -> DrawReason -> ShowS)
-> (DrawReason -> String)
-> ([DrawReason] -> ShowS)
-> Show DrawReason
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DrawReason] -> ShowS
$cshowList :: [DrawReason] -> ShowS
show :: DrawReason -> String
$cshow :: DrawReason -> String
showsPrec :: Int -> DrawReason -> ShowS
$cshowsPrec :: Int -> DrawReason -> ShowS
Show)
instance Control.DeepSeq.NFData DrawReason where
rnf :: DrawReason -> ()
rnf DrawReason
_ = ()
instance Property.FixedMembership.FixedMembership DrawReason where
members :: [DrawReason]
members = [DrawReason
ByAgreement, DrawReason
FiftyMoveRule, DrawReason
SeventyFiveMoveRule, DrawReason
InsufficientMaterial, DrawReason
StaleMate, DrawReason
ThreeFoldRepetition, DrawReason
FiveFoldRepetition]
byAgreement :: DrawReason
byAgreement :: DrawReason
byAgreement = DrawReason
ByAgreement
fiftyMoveRule :: DrawReason
fiftyMoveRule :: DrawReason
fiftyMoveRule = DrawReason
FiftyMoveRule
seventyFiveMoveRule :: DrawReason
seventyFiveMoveRule :: DrawReason
seventyFiveMoveRule = DrawReason
SeventyFiveMoveRule
insufficientMaterial :: DrawReason
insufficientMaterial :: DrawReason
insufficientMaterial = DrawReason
InsufficientMaterial
staleMate :: DrawReason
staleMate :: DrawReason
staleMate = DrawReason
StaleMate
threeFoldRepetition :: DrawReason
threeFoldRepetition :: DrawReason
threeFoldRepetition = DrawReason
ThreeFoldRepetition
fiveFoldRepetition :: DrawReason
fiveFoldRepetition :: DrawReason
fiveFoldRepetition = DrawReason
FiveFoldRepetition
maximumConsecutiveRepeatablePlies :: Type.Count.NPlies
maximumConsecutiveRepeatablePlies :: Int
maximumConsecutiveRepeatablePlies = Int
Component.Move.nPliesPerMove Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
75
maximumConsecutiveRepeatablePositions :: Type.Count.NPositions
maximumConsecutiveRepeatablePositions :: Int
maximumConsecutiveRepeatablePositions = Int
5