def join[A, B, C]()

in src/main/scala/com/twitter/stitch/Arrow.scala [2673:2691]


  def join[A, B, C](a1: Arrow[A, B], a2: Arrow[A, C]): Arrow[A, (B, C)] =
    joinMap(a1, a2)((_, _))

  /**
   * `Arrow.joinMap(a1, a2)(k)` is equivalent to
   * `Arrow.join(a1, a2).map(k.tupled)`,
   * but avoids allocating an intermediate tuple.
   */
  def joinMap[A, B, C, Z](a1: Arrow[A, B], a2: Arrow[A, C])(k: (B, C) => Z): Arrow[A, Z] =
    (a1, a2) match {
      case (Const(Throw(e)), _) => exception(e)
      case (_, Const(Throw(e))) => exception(e)
      case (Const(Return(v1)), _) =>
        a2.map(v2 => k(v1, v2))
      case (_, Const(Return(v2))) =>
        a1.map(v1 => k(v1, v2))
      case _ =>
        JoinMap2(a1, a2, k)
    }