Future[Option[Future

val fof = Future[Option[Future[Int]]]

val fo1 = fof.flatMap({
  case None => Future.successful(None)
  case Some(a) => a.map(Some(_))
})

val fo2 = fof.flatMap(opt => Future.sequence(opt.toSeq).map(_.headOption))
// Option拡張されんやつ  fof.flatMap(Future.sequence)
// TraversableOnce:[http://eed3si9n.github.io/scala-collections-doc-ja/collections_43.html]

//scalaz execution context
import scalaz.std.option._
import scalaz.std.scalaFuture._
import scalaz.syntax.traverse._
val fo3 = fof.flatMap(_.sequence)

とってもきれい
シグネチャ

/** Traverse with the identity function */
  final def sequence[G[_], B](implicit ev: A === G[B], G: Applicative[G]): G[F[B]] = {
    val fgb: F[G[B]] = ev.subst[F](self)
    F.sequence(fgb)
  }

FutureがApplicativeで、OptionがTraverseで
この場合の型パラメータは Future[Int] === G_[B_]

val fgb: Option[Future[Int]] = ev.subst[F](self)
F.sequence(fgb)

もっとふかくみるとおそらく Leibniz をみなきゃだから、いったんここでやめておく