     /// 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: Move, promotion: Piece) throws {
+    public func execute(move move: Move, promotion: Piece.Kind) throws {
         try execute(move: move, promotion: { promotion })
     }
 

    /// Executes `move`, updating the state for `self`.
    ///
    /// - parameter move: The move to be executed.
    /// - parameter promotion: A closure returning a promotion piece if a pawn promotion occurs.
    ///
    /// - throws: `ExecutionError` if `move` is illegal or if `promotion` is invalid.
    public func execute(move move: Move, @noescape promotion: () -> Piece) throws {
        guard isLegal(move: move) else {
            throw ExecutionError.IllegalMove(move, playerTurn, board)
        }

        /// Attempted illegal move.
        case IllegalMove(Move, Color, Board)

        /// Could not promote with a piece kind.
        case InvalidPromotion(Piece.Kind)

    }

