Implement Future.sequence for case class CanBuildFrom Traver



>我有这个:

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了。


我正在扩展我的评论作为答案。您需要一个用于SidesTraverse实例,而不是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

最新更新