a-foundation/src/main/java/com/ajjpj/afoundation/collection/ACollectionHelper.java
public static <T, R, E extends Throwable> R foldLeft (Iterable<T> coll, R startValue, AFunction2<R, ? super T, R, E> f) throws E {
        R result = startValue;

        for (T e: coll) {
            result = f.apply (result, e);
        }

        return result;
    }
public static <T, R, E extends Throwable> R foldLeft (Iterable<T> coll, R startValue, AFunction2<R, ? super T, R, E> f) throws E {
        R result = startValue;

        for (T e: coll) {
            result = f.apply (result, e);
        }

        return result;
    }
Applies a binary operator to a start value and all elements of this sequence, going left to right.

@param <T> element type of the collection
@param <R> result type