code: public int foldLeft(int seed, IntBinaryOperator accumulator) {
          int[] box = new int[] { seed };
          forEachOrdered(t -> box[0] = accumulator.applyAsInt(box[0], t));
          return box[0];
      }
docs: Folds the elements of this stream using the provided seed object and
  accumulation function, going left to right. This is equivalent to:
  
  <pre>
  {@code
  int result = seed;
  for (int element : this stream)
  result = accumulator.apply(result, element)
  return result;
  }
  </pre>
  
  <p>
  This is a terminal operation.
  
  <p>
  This method cannot take all the advantages of parallel streams as it must
  process elements strictly left to right. If your accumulator function is
  associative, consider using {@link #reduce(int, IntBinaryOperator)}
  method.
  
  <p>
  For parallel stream it's not guaranteed that accumulator will always be
  executed in the same thread.
  
  @param seed the starting value
  @param accumulator a
  <a href="package-summary.html#NonInterference">non-interfering
  </a>, <a href="package-summary.html#Statelessness">stateless</a>
  function for incorporating an additional element into a result
  @return the result of the folding
  @see #reduce(int, IntBinaryOperator)
  @see #foldLeft(IntBinaryOperator)
  @since 0.4.0