Future<IVector<B>> traverseFuture<B>(Future<B> f(A a)) => _elementsByIndex.foldLeft(Future.microtask(emptyVector), (prev, a) => prev.then((p) => f(a).then((b) => p.appendElement(b))));