code: @Override
      public <R> R reduce(R identity, $.Func2<R, T, R> accumulator) {
          R ret = identity;
          for (T t : this) {
              ret = accumulator.apply(ret, t);
          }
          return ret;
      }
docs: Iterate through the traversal to apply the accumulator to
  the result of previous application and the element being
  iterated. If the traversal is empty then return the
  identity specified
  
  @param identity    the identity value for the accumulating function
  @param accumulator the function the combine two values
  @param <R> the type of the identity and the return value
  @return the reduce result