scala - 值(value)|@|不是 scala.concurrent.Future[String] 的成员

标签 scala scalaz

我正在尝试使用 Scalaz 的应用程序构建器来简化一些并行运行一些 futures 的代码:

import scalaz._, Scalaz._

val fooF: Future [String] = myService.getFoo ()
val barF: Future [String] = myService.getBar ()
val resultF = for {
  foo <- fooF
  bar <- barF
}
yield { foo + bar }

我知道我应该能够像这样重写上面的代码:

val resultF = (myService.getFoo () |@| myService.getBar ()) {
  (foo, bar) => { foo + bar }
}

但是我遇到了以下编译错误:

value |@| is not a member of scala.concurrent.Future[String]

我做错了什么?

最佳答案

你需要在范围内有隐式的 ExecutionContext,它需要构建 Applicative for Future(以及 Monad 等)

  import scalaz._, Scalaz._

  import scala.concurrent.{Await, Future}
  import scala.concurrent.duration._

  import scala.concurrent.ExecutionContext.Implicits.global

  val fooF: Future [String] = Future("aaa")
  val barF: Future [String] = Future("bbb")

  val result = (fooF |@| barF)((l, r) => s"$l$r")

  println(Await.result(result, 10.seconds))

更新

你可以在scalaz.std.Future.scala中查看

implicit def futureInstance(implicit ec: ExecutionContext): Monad[Future] with Cobind[Future] =
    new FutureInstance

关于scala - 值(value)|@|不是 scala.concurrent.Future[String] 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27406495/

相关文章:

scala - Spark 3.0 中使用聚合器的通用 UDAF

java - 如何在 java 或 scala 中获取本地主机网络接口(interface)

scala - Scala IDE 有 *.sbt 语法高亮支持吗?

scalaz 7.2.6 flatMap 不是验证方法吗?

haskell - 我可以自动实现类吗?

scala - 如何在 scala 中进行依赖注入(inject)?

scala - Play Framework Scala 在后台运行作业

scala - Scalaz `F[_] : Applicative` 类型约束如何暗示使用隐式参数?

scala - 在函数外部导入 scalaz monad 语法

scala - 如何使用 ToFunctorOps 的提升