     /// Executes `move`, updating the state for `self`.
     ///
     /// - parameter move: The move to be executed.
-    /// - parameter promotion: A piece for a pawn promotion.
+    /// - parameter promotion: A piece kind for a pawn promotion.
     ///
     /// - throws: `ExecutionError` if `move` is illegal or if `promotion` is invalid.
-    public func execute(move: Move, promotion: Piece) throws {
+    public func execute(move: Move, promotion: Piece.Kind) throws {
         try execute(move: move, promotion: { promotion })
     }
 

    private var _moveHistory: [(move: Move, piece: Piece, capture: Piece?, kingAttackers: Bitboard, halfmoves: UInt, rights: CastlingRights)]

    /// All of the undone moves in the game.
    private var _undoHistory: [(move: Move, promotion: Piece?, kingAttackers: Bitboard)]

    /// The game's board.
    public private(set) var board: Board


    /// Executes a move without checking the legality of the move.
    private func _execute(_ move: Move) throws {
        try _execute(move, promotion: { ._queen })
    }

    #if swift(>=3)
