     /// A move history record.
     private typealias _MoveRecord = (move: Move, piece: Piece, capture: Piece?)
 
+    /// An undo history record.
+    private typealias _UndoRecord = (move: Move, promotion: Piece?)
+
     /// A player turn.
     public typealias PlayerTurn = Color
 
     /// All of the conducted moves in the game.
     private var _moveHistory: [_MoveRecord]
+
+    /// All of the undone moves in the game.
+    private var _undoHistory: [_UndoRecord]
 
     /// The game's board.
     public private(set) var board: Board

        try executeMove(move, promotion: { promotion })
    }

}

private typealias _MoveResult = _Result<Piece, MoveExecutionError>

    /// - Parameter mode: The game's mode. Default is `HumanVsHuman`.
    public init(mode: Mode = .HumanVsHuman) {
        self._moveHistory = []
        self._undoHistory = []
        self.board = Board()
        self.playerTurn = .White
        self.mode = mode
