in src/main/scala/com/twitter/stitch/Arrow.scala [3899:3912]
def collect[T, U](arrows: Seq[Arrow[T, U]]): Arrow[T, Seq[U]] =
arrows match {
case Seq() => value(Seq.empty[U])
case Seq(a) => a.map(Seq(_))
case _ =>
val throws: PartialFunction[Arrow[T, U], Throwable] = { case Const(Throw(e)) => e }
val returns: PartialFunction[Arrow[T, U], U] = { case Const(Return(v)) => v }
if (arrows.exists(throws.isDefinedAt))
Arrow.exception(arrows.collectFirst(throws).get)
else if (arrows.forall(returns.isDefinedAt))
Arrow.value(arrows.collect(returns))
else
Collect(arrows)
}