in storehaus-core/src/main/scala/com/twitter/storehaus/PivotOps.scala [63:78]
private def plusM[K, V](
l: Map[K, Future[Option[List[V]]]],
r: Map[K, Future[Option[List[V]]]]
): Map[K, Future[Option[List[V]]]] =
(r /: l) { case (m, (k, futureOptV)) =>
val newV = for {
leftOptV <- futureOptV
rightOptV <- m.getOrElse(k, Future.None)
} yield (leftOptV, rightOptV) match {
case (None, None) => None
case (None, Some(v)) => Some(v)
case (Some(v), None) => Some(v)
case (Some(left), Some(right)) => Some(left ++ right)
}
m + (k -> newV)
}