!W~Ex      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None"#$%*7>@AHMPV_agkpYchessIOBlaw: square i x ! i = x where inRange (0,63) i && inRange (0,15) xchessIOzMove a nibble. Note that this function, while convenient, isn't very fast as it needs to lookup the source nibble value.chessIO bitwise XOR;      !"#$%&'()*+,-./012345678;Basic data types and functions related to the game of chess(c) Mario Lang, 2019BSD3mlang@blind.guru experimentalNone"#$%&'*-7=>?@AHMPVX_agkp%. chessIO active colorchessIOnumber of the full moveYchessIO=The starting position as given by the FEN string "rnbqkbnrpppppppp8888 PPPPPPPP/RNBQKBNR w KQkq - 0 1".^chessIO3Construct a position from Forsyth-Edwards-Notation._chessIO/Convert a position to Forsyth-Edwards-Notation.achessIOJParse a move in the format used by the Universal Chess Interface protocol.bchessIOLConvert a move to the format used by the Universal Chess Interface protocol.9chessIO<Validate that a certain move is legal in the given position.cchessIO#Apply a move to the given position.[This function checks if the move is actually legal and throws and error if it isn't. See d- for a version that omits the legality check.dchessIOAn unsafe version of c. Only use this if you are sure the given move can be applied to the position. This is useful if the move has been generated by the moves function.echessIO9Generate a list of possible moves for the given position.fchessIOReturns : if J# is in check in the given position.j 6  !"#$%&'()*+,-./012345789:;<=>?@ABCDEFGHIJLKMNOPQRSTUVWXYZ[\]^_`abcdefghijJLK[ 6  !"#$%&'()*+,-./012345789:;<=>?@ABCDEFGHI]\MNOPQRSYZfghi^_TUVWXab`ecdNone"#$%*7>@AHMPV_agkp)dNone"#$%*7>@AHMPVX_agkp-chessIOA Polyglot opening book.chessIO(Create a PolyglotBook from a ByteString.chessIO Pick a random ply from the book.chessIO:Probe the book for all plies known for the given position.None"#$%&'*7>@AHMPV_agkp.None"#$%*7>@AHMPV_agkpB;chessIO+restrict search to the specified moves only<chessIO(time (in milliseconds) left on the clock=chessIO'time increment per move in milliseconds>chessIO(number of moves to the next time control?chessIO search until  gets calledchessIOWSet the starting position of the current game, also clearing any pre-existing history.chessIOMStart a UCI engine with the given executable name and command line arguments.chessIO=Start a UCI engine with the given timeout for initialisation._If the engine takes more then the given microseconds to answer to the initialisation request, @: is returned and the external process will be terminated.chessIO5Wait until the engine is ready to take more commands.chessIO'Instruct the engine to begin searching.chessIOStop a search in progress.chessIO(Set a spin option to a particular value.MBounds are validated. Make sure you don't set a value which is out of range.chessIO7Return the final position of the currently active game.chessIOAdd a Move to the game history.AThis function checks if the move is actually legal, and throws a  if it isn't.chessIOQuit the engine.chessIOthe game previously in progress<<None"#$%*7>@AHMPV_agkpESABCDEFGHI       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR&chessIO-0.3.1.0-4KgbDpCN9l4CGto0NYz6jI Game.ChessGame.Chess.Polyglot.HashGame.Chess.Polyglot.BookGame.Chess.PGNGame.Chess.UCIGame.Chess.QuadBitboard Paths_chessIOCastleKingside QueensidePlyPositioncolor halfMoveClock moveNumberSqA1B1C1D1E1F1G1H1A2B2C2D2E2F2G2H2A3B3C3D3E3F3G3H3A4B4C4D4E4F4G4H4A5B5C5D5E5F5G5H5A6B6C6D6E6F6G6H6A7B7C7D7E7F7G7H7A8B8C8D8E8F8G8H8ColorBlackWhite PieceTypePawnKnightBishopRookQueenKing strictSAN relaxedSANfromSANtoSAN unsafeToSANstartpospieceAtopponentisDarkisLightfromFENtoFEN fromPolyglotfromUCItoUCIdoPly unsafeDoPly legalPliesinCheckcastlingRightscanCastleKingsidecanCastleQueenside$fSANTokenWord8$fSANTokenChar $fIsSquareInt $fIsSquareSq $fEqPosition $fShowPly $fShowFrom $fEqSANStatus$fReadSANStatus$fShowSANStatus $fEqPieceType $fIxPieceType$fOrdPieceType$fShowPieceType $fEqColor $fIxColor $fOrdColor $fShowColor $fEqPiece $fShowPiece $fBoundedSq$fEnumSq$fEqSq$fIxSq$fOrdSq$fShowSq$fEqPly $fEqCastle $fIxCastle $fOrdCastle $fShowCastle $fEqDirection$fShowDirection hashPositionpieceKey castleKeyturnKey PolyglotBook defaultBooktwicfromByteStringreadPolyglotFile bookForestbookPly bookPlies$fStorableBookEntry $fEqBookEntry$fShowBookEntry$fEqPolyglotBookRAVOrderOutcomeWinDraw UndecidedGamePGNgameFromForest readPGNFilehPutPGN breadthFirst depthFirstpgnDocgameDoc$fPrettyOutcome $fEqOutcome $fShowOutcome $fEqPlyData $fShowPlyData$fEqPGN $fMonoidPGN$fSemigroupPGN SearchParamOptionCheckBoxComboBox SpinButtonOStringButton comboBoxValuecomboBoxValuesspinButtonValuespinButtonMinBoundspinButtonMaxBoundBounds UpperBound LowerBoundScore CentiPawnsMateInInfoPVDepthSelDepthElapsedMultiPVNodesNPSTBHitsHashFullCurrMoveCurrMoveNumberString UCIException IllegalMoveEnginenameauthoroptions setPositionstartstart'isready searchmovestimeleft timeincrement movestogomovetimenodesdepthinfinite searchingsearchstop getOptionsetOptionSpinButtonsetOptionStringcurrentPositionaddPlyquitquit'$fExceptionUCIException$fIsStringOption$fShowUCIException $fEqScore $fOrdScore $fShowScore $fEqBounds $fShowBounds$fEqInfo $fShowInfo $fEqOption $fShowOption $fShowCommand$fEqSearchParam$fShowSearchParamsquaremove$fSemigroupQuadBitboardWord4W4 QuadBitboardQBBblackpbqnbkrqk BlackKing BlackQueen BlackRook BlackBishop BlackKnight BlackPawn WhiteKing WhiteQueen WhiteRook WhiteBishop WhiteKnight WhitePawnNoPieceoccupiedpnrwhitepawnsknightsbishopsrooksqueenskingswPawnswKnightswBishopswRookswQueenswKingsbPawnsbKnightsbBishopsbRooksbQueensbKingsemptystandard! setNibbletoStringmove'whiteKingsideCastlewhiteQueensideCastleblackKingsideCastleblackQueensideCastle enPassantwhitePromotionblackPromotionwhitePromotion'blackPromotion' relativeToghc-prim GHC.TypesTrue SearchMovesTimeLeft TimeIncrement MovesToGoInfinitebase GHC.MaybeNothingversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName