function reduce( fcn ) {
			var acc;
			var i;
			if ( this !== tuple ) { // eslint-disable-line no-invalid-this
				throw new TypeError( 'invalid invocation. `this` is not host tuple.' );
			}
			if ( !isFunction( fcn ) ) {
				throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', fcn ) );
			}
			if ( arguments.length > 1 ) {
				acc = arguments[ 1 ];
				i = 0;
			} else {
				acc = tuple[ 0 ];
				i = 1;
			}
			for ( ; i < nfields; i++ ) {
				acc = fcn( acc, tuple[ i ], i, fields[ indices[i] ], tuple );
			}
			return acc;
		}
Applies a function against an accumulator and each element in a tuple and returns the accumulated result.

@private
@memberof tuple
@param {Function} fcn - reduction function
@param {*} [initial] - initial value
@throws {TypeError} `this` must be the host tuple
@throws {TypeError} first argument must be a function
@returns {*} accumulated result