code: public S prefix(BinaryOperator<T> op) {
          Spliterator<T> spltr = spliterator();
          return supply(spltr.hasCharacteristics(Spliterator.ORDERED) ? new PrefixOps.OfRef<>(spltr, op)
                  : new PrefixOps.OfUnordRef<T>(spltr, op));
      }
docs: Returns a stream containing cumulative results of applying the
  accumulation function going left to right.
  
  <p>
  This is a stateful <a
  href="package-summary.html#StreamOps">quasi-intermediate</a> operation.
  
  <p>
  This operation resembles {@link #scanLeft(BinaryOperator)}, but unlike
  {@code scanLeft} this operation is intermediate and accumulation function
  must be associative.
  
  <p>
  This method cannot take all the advantages of parallel streams as it must
  process elements strictly left to right. Using an unordered source or
  removing the ordering constraint with {@link #unordered()} may improve
  the parallel processing speed.
  
  @param op an <a
  href="package-summary.html#Associativity">associative</a>, <a
  href="package-summary.html#NonInterference">non-interfering </a>,
  <a href="package-summary.html#Statelessness">stateless</a>
  function for computing the next element based on the previous one
  @return the new stream.
  @see #scanLeft(BinaryOperator)
  @since 0.6.1