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

3

3
由于需要评估任务以打破整个想法,因此无法反过来进行。 - Luis Miguel Mejía Suárez
1
谢谢,我意识到我不需要反之亦然,并更新了问题。 - Karthik P
你应该查找Traversable。这个特质恰好是所需的。 - Mark Saving
1个回答

3

如果你想使用纯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]”中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接