a-foundation/src/main/java/com/ajjpj/afoundation/concurrent/StaticFutureMethods.java
public static <R, T, E extends Throwable> AFuture<AList<R>> traverse (AThreadPool tp, Iterable<T> values, AFunction1<T, AFuture<R>, E> f) throws E {
        final List<AFuture<R>> result = new ArrayList<> ();
        for (T o: values) {
            result.add (f.apply (o));
        }
        return lift (tp, result);
    }
public static <R, T, E extends Throwable> AFuture<AList<R>> traverse (AThreadPool tp, Iterable<T> values, AFunction1<T, AFuture<R>, E> f) throws E {
        final List<AFuture<R>> result = new ArrayList<> ();
        for (T o: values) {
            result.add (f.apply (o));
        }
        return lift (tp, result);
    }
}