static <A> L<A> pcallFParallel(F0<A>... functions) {
  ret pcallFParallel(asList(functions));
}

static <A> L<A> pcallFParallel(L<F0<A>> functions) {
  int n = l(functions);
  L<A> outInner = repNull(n);
  final L<A> out = synchroList(outInner);
  new L<Steppable> steppables;
  for i to n: {
    final F0<A> f = functions.get(i);
    final int _i = i;
    steppables.add(new Steppable {
      public bool step() {
        out.set(_i, pcallF(f));
        false;
      }
    });
  }
  new Flag done;
  new MultiThreadStepper(steppables).onDone(rRaiseFlag(done)).start();
  done.waitUntilUp();
  ret outInner;
}