code: 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);
  }
docs: 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}