>我有这个:
case class Sides[A](east: A, west: A)
我想将此Sides[Future[Boolean]]
转换为此Future[Sides[Boolean]]
如何使用Future.sequence
?
这是文档:
def
sequence[A, M[X] <: TraversableOnce[X]](in: M[Future[A]])(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]], executor: ExecutionContext): Future[M[A]]
Permalink
Simple version of Future.traverse. Transforms a TraversableOnce[Future[A]] into a Future[TraversableOnce[A]]. Useful for reducing many Futures into a single Future
编辑:由于这个问题有scalaz
标签,我假设有问题的Future
来自scalaz
。在问题被编辑之后,很明显OP已经从Scala标准库中Future
了。
我正在扩展我的评论作为答案。您需要一个用于Sides
的Traverse
实例,而不是Future
。(Future
不存在Traverse
实例,除非你愿意急切地评估Future
。
import scalaz.{Applicative, Traverse}
import scalaz.concurrent.Future
import scalaz.syntax.traverse._
case class Sides[A](east: A, west: A)
implicit def traverseSides: Traverse[Sides] = new Traverse[Sides] {
def traverseImpl[G[_], A, B](s: Sides[A])(f: A => G[B])(implicit G: Applicative[G]): G[Sides[B]] =
G.apply2(f(s.east), f(s.west))(Sides(_, _))
}
val sf: Sides[Future[Boolean]] = ???
vaf fs: Future[Sides[Boolean]] = sf.sequence