Yes - basically, the futures here form a reduction tree for a parallel computation. The parent node in this tree (a future) can be completed with `firstFuture` only after all the children (futures) have completed and been merged with `firstFuture`.

Also, `Task` objects are mutable -- to avoid allocating extra objects, the main fork/join-based implementation was rewriting the results inside the `Task` objects, hence the `firstFuture` serves as an accumulator in the `reduceLeft` above.