module Parsers.Command (parseCommand) where import AppPrelude import Models.Command import Models.Position import Parsers.Position import Bookhound.Parser import Bookhound.ParserCombinators import Bookhound.Parsers.Number import Bookhound.Parsers.Text import Control.Newtype import Data.Monoid import Models.Piece parseCommand :: Text -> Either [ParseError] Command parseCommand :: Text -> Either [ParseError] Command parseCommand = Parser Command -> Text -> Either [ParseError] Command forall a. Parser a -> Text -> Either [ParseError] a runParser Parser Command command where command :: Parser Command command = Text -> Parser Text stringToken Text "ucinewgame" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command UciNewGame Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "uci" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Uci Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "isready" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command IsReady Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "position" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> (PositionSpec -> Command SetPosition (PositionSpec -> Command) -> Parser PositionSpec -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser PositionSpec positionSpec) Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "setoption" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> (OptionSpec -> Command SetOption (OptionSpec -> Command) -> Parser OptionSpec -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser OptionSpec optionSpec) Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "move" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> ([UnknownMove] -> Command MakeMoves ([UnknownMove] -> Command) -> Parser [UnknownMove] -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser [UnknownMove] unknownMoves) Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "ponderhit" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Ponderhit Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "stop" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Stop Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "quit" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Quit Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "eval" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Evaluate Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "display" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Display Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "flip" Parser Text -> Command -> Parser Command forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Command Flip Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "go" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> (Text -> Parser Text stringToken Text "perft" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> (Depth -> Command Perft (Depth -> Command) -> Parser Depth -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Depth depth) Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "divide" Parser Text -> Parser Command -> Parser Command forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> (Depth -> Command Divide (Depth -> Command) -> Parser Depth -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Depth depth) Parser Command -> Parser Command -> Parser Command forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> (SearchOptions -> Command Search (SearchOptions -> Command) -> Parser SearchOptions -> Parser Command forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser SearchOptions searchOptions)) searchOption :: Parser (SearchOptions -> SearchOptions) searchOption = SearchOptions -> SearchOptions setInfinite (SearchOptions -> SearchOptions) -> Parser Text -> Parser (SearchOptions -> SearchOptions) forall a b. a -> Parser b -> Parser a forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ Parser Text -> Parser Text forall {a}. Parser a -> Parser a token (forall a. IsMatch a => [a] -> Parser a oneOf @Text [Text "infinite", Text "ponder"]) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> [UnknownMove] -> SearchOptions -> SearchOptions setSearchMoves ([UnknownMove] -> SearchOptions -> SearchOptions) -> Parser [UnknownMove] -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "searchmoves" Parser Text -> Parser [UnknownMove] -> Parser [UnknownMove] forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser [UnknownMove] unknownMoves) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Depth -> SearchOptions -> SearchOptions setTargetDepth (Depth -> SearchOptions -> SearchOptions) -> Parser Depth -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "depth" Parser Text -> Parser Depth -> Parser Depth forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Depth depth) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setWhiteTime (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "wtime" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setBlackTime (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "btime" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setWhiteIncrement (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "winc" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setBlackIncrement (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "binc" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setMovesUntil (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "movestogo" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setFindMate (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "mate" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Int -> SearchOptions -> SearchOptions setMoveTime (Int -> SearchOptions -> SearchOptions) -> Parser Int -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "movetime" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) -> Parser (SearchOptions -> SearchOptions) forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Word64 -> SearchOptions -> SearchOptions setMaxNodes (Word64 -> SearchOptions -> SearchOptions) -> Parser Word64 -> Parser (SearchOptions -> SearchOptions) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Text -> Parser Text stringToken Text "nodes" Parser Text -> Parser Word64 -> Parser Word64 forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Word64 unsignedBigInt) positionSpec :: Parser PositionSpec positionSpec = Position -> [UnknownMove] -> PositionSpec PositionSpec (Position -> [UnknownMove] -> PositionSpec) -> Parser Position -> Parser ([UnknownMove] -> PositionSpec) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Position initialPositionSpec Parser ([UnknownMove] -> PositionSpec) -> Parser [UnknownMove] -> Parser PositionSpec forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Text -> Parser Text stringToken Text "moves" Parser Text -> Parser [UnknownMove] -> Parser [UnknownMove] forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser [UnknownMove] unknownMoves Parser [UnknownMove] -> Parser [UnknownMove] -> Parser [UnknownMove] forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> [UnknownMove] -> Parser [UnknownMove] forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure []) optionSpec :: Parser OptionSpec optionSpec = Text -> Parser Text stringToken Text "name" Parser Text -> Parser OptionSpec -> Parser OptionSpec forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> ( (Text -> Parser Text stringToken Text "Hash" Parser Text -> (Int -> OptionSpec) -> Parser (Int -> OptionSpec) forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Int -> OptionSpec HashSize) Parser (Int -> OptionSpec) -> Parser Int -> Parser OptionSpec forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Text -> Parser Text stringToken Text "value" Parser Text -> Parser Int -> Parser Int forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Int unsignedInt) Parser OptionSpec -> Parser OptionSpec -> Parser OptionSpec forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> (Text -> Parser Text stringToken Text "Ponder" Parser Text -> (Bool -> OptionSpec) -> Parser (Bool -> OptionSpec) forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Bool -> OptionSpec Ponder) Parser (Bool -> OptionSpec) -> Parser Bool -> Parser OptionSpec forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Text -> Parser Text stringToken Text "value" Parser Text -> Parser Bool -> Parser Bool forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Bool boolean) Parser OptionSpec -> Parser OptionSpec -> Parser OptionSpec forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "Clear Hash" Parser Text -> OptionSpec -> Parser OptionSpec forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> OptionSpec ClearHash) searchOptions :: Parser SearchOptions searchOptions = ((SearchOptions -> SearchOptions) -> SearchOptions -> SearchOptions forall a b. (a -> b) -> a -> b $ SearchOptions defaultSearchOptions) ((SearchOptions -> SearchOptions) -> SearchOptions) -> ([SearchOptions -> SearchOptions] -> SearchOptions -> SearchOptions) -> [SearchOptions -> SearchOptions] -> SearchOptions forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ((SearchOptions -> SearchOptions) -> Endo SearchOptions) -> (((SearchOptions -> SearchOptions) -> Endo SearchOptions) -> [SearchOptions -> SearchOptions] -> Endo SearchOptions) -> [SearchOptions -> SearchOptions] -> SearchOptions -> SearchOptions forall n o n' o' b. (Newtype n o, Newtype n' o') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o' ala (SearchOptions -> SearchOptions) -> Endo SearchOptions forall a. (a -> a) -> Endo a Endo (Element [SearchOptions -> SearchOptions] -> Endo SearchOptions) -> [SearchOptions -> SearchOptions] -> Endo SearchOptions ((SearchOptions -> SearchOptions) -> Endo SearchOptions) -> [SearchOptions -> SearchOptions] -> Endo SearchOptions forall mono m. (MonoFoldable mono, Monoid m) => (Element mono -> m) -> mono -> m foldMap ([SearchOptions -> SearchOptions] -> SearchOptions) -> Parser [SearchOptions -> SearchOptions] -> Parser SearchOptions forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Parser (SearchOptions -> SearchOptions) searchOption |*) initialPositionSpec :: Parser Position initialPositionSpec = Text -> Parser Text stringToken Text "startpos" Parser Text -> Position -> Parser Position forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Position startPosition Parser Position -> Parser Position -> Parser Position forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "fen" Parser Text -> Parser Position -> Parser Position forall a b. Parser a -> Parser b -> Parser b forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Position positionFenParser unknownMoves :: Parser [UnknownMove] unknownMoves = (Parser UnknownMove -> Parser UnknownMove forall {a}. Parser a -> Parser a token Parser UnknownMove unknownMove |+) unknownMove :: Parser UnknownMove unknownMove = Int -> Int -> Promotion -> UnknownMove UnknownMove (Int -> Int -> Promotion -> UnknownMove) -> Parser Int -> Parser (Int -> Promotion -> UnknownMove) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Int squareParser Parser (Int -> Promotion -> UnknownMove) -> Parser Int -> Parser (Promotion -> UnknownMove) forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Parser Int squareParser Parser (Promotion -> UnknownMove) -> Parser Promotion -> Parser UnknownMove forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Promotion -> Maybe Promotion -> Promotion forall a. a -> Maybe a -> a fromMaybe Promotion NoProm (Maybe Promotion -> Promotion) -> Parser (Maybe Promotion) -> Parser Promotion forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Parser Promotion promotionParser |?)) promotionParser :: Parser Promotion promotionParser = Text -> Parser Text string Text "k" Parser Text -> Promotion -> Parser Promotion forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Promotion KnightProm Parser Promotion -> Parser Promotion -> Parser Promotion forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text string Text "b" Parser Text -> Promotion -> Parser Promotion forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Promotion BishopProm Parser Promotion -> Parser Promotion -> Parser Promotion forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text string Text "r" Parser Text -> Promotion -> Parser Promotion forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Promotion RookProm Parser Promotion -> Parser Promotion -> Parser Promotion forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text string Text "q" Parser Text -> Promotion -> Parser Promotion forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Promotion QueenProm boolean :: Parser Bool boolean = Text -> Parser Text stringToken Text "true" Parser Text -> Bool -> Parser Bool forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Bool True Parser Bool -> Parser Bool -> Parser Bool forall a. Parser a -> Parser a -> Parser a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Parser Text stringToken Text "false" Parser Text -> Bool -> Parser Bool forall (f :: * -> *) a b. Functor f => f a -> b -> f b $> Bool False token :: Parser a -> Parser a token = (forall {a}. Parser a -> Parser a) -> Parser a -> Parser a forall a. (forall {a}. Parser a -> Parser a) -> Parser a -> Parser a withTransform Parser b -> Parser b forall {a}. Parser a -> Parser a maybeBetweenSpacing stringToken :: Text -> Parser Text stringToken = Parser Text -> Parser Text forall {a}. Parser a -> Parser a token (Parser Text -> Parser Text) -> (Text -> Parser Text) -> Text -> Parser Text forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> Parser Text string depth :: Parser Depth depth = Int -> Depth forall a b. (Integral a, Num b) => a -> b fromIntegral (Int -> Depth) -> Parser Int -> Parser Depth forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Int -> Bool) -> Parser Int -> Parser Int forall a. (a -> Bool) -> Parser a -> Parser a satisfy (Int -> Int -> Int -> Bool inRange Int 1 Int 255) Parser Int unsignedInt unsignedBigInt :: Parser Word64 unsignedBigInt = Int -> Word64 forall a b. (Integral a, Num b) => a -> b fromIntegral (Int -> Word64) -> Parser Int -> Parser Word64 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser Int unsignedInt setTargetDepth :: Depth -> SearchOptions -> SearchOptions setTargetDepth Depth x SearchOptions opts = SearchOptions opts { targetDepth = x } setSearchMoves :: [UnknownMove] -> SearchOptions -> SearchOptions setSearchMoves [UnknownMove] x SearchOptions opts = SearchOptions opts { searchMoves = x } setInfinite :: SearchOptions -> SearchOptions setInfinite SearchOptions opts = SearchOptions opts { infinite = True } setMoveTime :: Int -> SearchOptions -> SearchOptions setMoveTime Int x SearchOptions opts = SearchOptions opts { moveTime = Just x } setWhiteTime :: Int -> SearchOptions -> SearchOptions setWhiteTime Int x SearchOptions opts = SearchOptions opts { whiteTime = Just x } setWhiteIncrement :: Int -> SearchOptions -> SearchOptions setWhiteIncrement Int x SearchOptions opts = SearchOptions opts { whiteIncrement = Just x } setBlackTime :: Int -> SearchOptions -> SearchOptions setBlackTime Int x SearchOptions opts = SearchOptions opts { blackTime = Just x } setBlackIncrement :: Int -> SearchOptions -> SearchOptions setBlackIncrement Int x SearchOptions opts = SearchOptions opts { blackIncrement = Just x } setMovesUntil :: Int -> SearchOptions -> SearchOptions setMovesUntil Int x SearchOptions opts = SearchOptions opts { movesUntilNextTime = Just x } setFindMate :: Int -> SearchOptions -> SearchOptions setFindMate Int x SearchOptions opts = SearchOptions opts { findMate = Just x } setMaxNodes :: Word64 -> SearchOptions -> SearchOptions setMaxNodes Word64 x SearchOptions opts = SearchOptions opts { maxNodes = Just x }