public final <T> T reduce(@Nullable T first, @NotNull PairFunction<? super T, ? super E, ? extends T> function) {
    T cur = first;
    for (E e : this) {
      cur = function.fun(cur, e);
    }
    return cur;
  }
public final <T> T reduce(@Nullable T first, @NotNull PairFunction<? super T, ? super E, ? extends T> function)