src/functional-pipelines.js
function reduce(reducingFn, initFn, enumerable, resultFn) {
    if (isFunction(resultFn)) {
        resultFn = pipe(unreduced, resultFn);
    } else {
        resultFn = unreduced;
    }
    let result;
    const iter = iterator(enumerable);

    if (!initFn) {
        const [initValue] = iter;
        initFn = lazy(initValue);
    }
    result = initFn();

    for (const value of iter) {
        if (isReduced(result)) {
            break;
        }
        result = reducingFn(result, value);
    }
    return resultFn(result);
}
function reduce(reducingFn, initFn, enumerable, resultFn) {
    if (isFunction(resultFn)) {
        resultFn = pipe(unreduced, resultFn);
    } else {
        resultFn = unreduced;
    }
    let result;
    const iter = iterator(enumerable);

    if (!initFn) {
        const [initValue] = iter;
        initFn = lazy(initValue);
    }
    result = initFn();

    for (const value of iter) {
        if (isReduced(result)) {
            break;
        }
        result = reducingFn(result, value);
    }
    return resultFn(result);
}
function reduce ( reducingFn , initFn , enumerable , resultFn ) { if ( isFunction ( resultFn ) ) { resultFn = pipe ( unreduced , resultFn ) ; } else { resultFn = unreduced ; } let result ; const iter = iterator ( enumerable ) ; if ( ! initFn ) { const [ initValue ] = iter ; initFn = lazy ( initValue ) ; } result = initFn ( ) ; for ( const value of iter ) { if ( isReduced ( result ) ) { break ; } result = reducingFn ( result , value ) ; } return resultFn ( result ) ; }
Implements reduce for iterables

Uses the for-of to reduce an iterable, accepting a reducing function
@param iterable
@param reducingFn: function of arity 2, (acc, input) -> new acc
@param initFn: produces the initial value for the accumulator
@returns {Accumulator-Collection}
Implements reduce for iterables