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);
    }
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 ) ; }
}
}