有没有一种简单的方法可以将 Option[Task[T]] 转换为 Task[Option[T]]?

时间:2021-07-01 13:19:18

标签: scala functional-programming reactive-programming zio monix

在使用 monix.eval.Taskzio.Task 时,是否有一种简单的方法可以将 Task 的 Option 转换为 Task of Option?

1 个答案:

答案 0 :(得分:2)

如果您想要一个纯粹的 ZIO 解决方案,您可以将 .foreachidentity 结合使用:

val fx: Option[UIO[Int]] = Option(Task.effectTotal(42))
val res: UIO[Option[Int]] = ZIO.foreach(fx)(identity)

如果您还使用 cats,则您要查找的方法称为 .sequence

import cats.implicits.toTraverseOps
import zio.interop.catz._
import zio.{Task, UIO}

val fx: Option[UIO[Int]] = Option(Task.effectTotal(42))
val res: UIO[Option[Int]] = fx.sequence

相反的方式是不可能的,因为需要实现 Task 才能将其提升为 Option[T]

相关问题