{-# LANGUAGE LambdaCase #-}
module BishBosh.UI.ReportObject (
ReportObject(..),
range,
autoComplete
) where
import qualified BishBosh.Property.FixedMembership as Property.FixedMembership
import qualified BishBosh.Text.AutoComplete as Text.AutoComplete
import qualified Control.Arrow
import qualified Control.DeepSeq
import qualified Data.List.Extra
availableMovesTag :: String
availableMovesTag :: String
availableMovesTag = String
"availableMoves"
boardTag :: String
boardTag :: String
boardTag = String
"board"
epdTag :: String
epdTag :: String
epdTag = String
"epd"
fenTag :: String
fenTag :: String
fenTag = String
"fen"
gameTag :: String
gameTag :: String
gameTag = String
"game"
maxPositionInstancesTag :: String
maxPositionInstancesTag :: String
maxPositionInstancesTag = String
"maxPositionInstances"
movesTag :: String
movesTag :: String
movesTag = String
"moves"
pgnTag :: String
pgnTag :: String
pgnTag = String
"pgn"
reversiblePlyCountTag :: String
reversiblePlyCountTag :: String
reversiblePlyCountTag = String
"reversiblePlyCount"
data ReportObject
= AvailableMoves
| Board
| EPD
| FEN
| Game
| MaxPositionInstances
| Moves
| PGN
| ReversiblePlyCount
deriving ReportObject -> ReportObject -> Bool
(ReportObject -> ReportObject -> Bool)
-> (ReportObject -> ReportObject -> Bool) -> Eq ReportObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReportObject -> ReportObject -> Bool
$c/= :: ReportObject -> ReportObject -> Bool
== :: ReportObject -> ReportObject -> Bool
$c== :: ReportObject -> ReportObject -> Bool
Eq
instance Control.DeepSeq.NFData ReportObject where
rnf :: ReportObject -> ()
rnf ReportObject
_ = ()
instance Show ReportObject where
showsPrec :: Int -> ReportObject -> ShowS
showsPrec Int
_ = String -> ShowS
showString (String -> ShowS)
-> (ReportObject -> String) -> ReportObject -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
ReportObject
AvailableMoves -> String
availableMovesTag
ReportObject
Board -> String
boardTag
ReportObject
EPD -> String
epdTag
ReportObject
FEN -> String
fenTag
ReportObject
Game -> String
gameTag
ReportObject
MaxPositionInstances -> String
maxPositionInstancesTag
ReportObject
Moves -> String
movesTag
ReportObject
PGN -> String
pgnTag
ReportObject
ReversiblePlyCount -> String
reversiblePlyCountTag
instance Read ReportObject where
readsPrec :: Int -> ReadS ReportObject
readsPrec Int
_ String
s = case ShowS -> (String, String) -> (String, String)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
Control.Arrow.first ShowS
Data.List.Extra.lower ((String, String) -> (String, String))
-> [(String, String)] -> [(String, String)]
forall a b. (a -> b) -> [a] -> [b]
`map` ReadS String
lex String
s of
[(String
"availablemoves", String
remainder)] -> [(ReportObject
AvailableMoves, String
remainder)]
[(String
"board", String
remainder)] -> [(ReportObject
Board, String
remainder)]
[(String
"epd", String
remainder)] -> [(ReportObject
EPD, String
remainder)]
[(String
"fen", String
remainder)] -> [(ReportObject
FEN, String
remainder)]
[(String
"game", String
remainder)] -> [(ReportObject
Game, String
remainder)]
[(String
"maxpositioninstances", String
remainder)] -> [(ReportObject
MaxPositionInstances, String
remainder)]
[(String
"moves", String
remainder)] -> [(ReportObject
Moves, String
remainder)]
[(String
"pgn", String
remainder)] -> [(ReportObject
PGN, String
remainder)]
[(String
"reversibleplycount", String
remainder)] -> [(ReportObject
ReversiblePlyCount, String
remainder)]
[(String, String)]
_ -> []
range :: [ReportObject]
range :: [ReportObject]
range = [ReportObject
AvailableMoves, ReportObject
Board, ReportObject
EPD, ReportObject
FEN, ReportObject
Game, ReportObject
MaxPositionInstances, ReportObject
Moves, ReportObject
PGN, ReportObject
ReversiblePlyCount]
instance Property.FixedMembership.FixedMembership ReportObject where
members :: [ReportObject]
members = [ReportObject]
range
autoComplete :: ShowS
autoComplete :: ShowS
autoComplete = [String] -> ShowS
Text.AutoComplete.autoComplete [
String
availableMovesTag,
String
boardTag,
String
epdTag,
String
fenTag,
String
gameTag,
String
maxPositionInstancesTag,
String
movesTag,
String
pgnTag,
String
reversiblePlyCountTag
]