我的计算有三个步骤,如下:
import cats.effect.IO
def step1: IO[Unit] = ???
def step2: IO[Unit] = ???
def step3: IO[Unit] = ???
我可以使用简单的理解顺序将它们组合在一起:
val c: IO[Unit] = for {
_ <- step1
_ <- step2
_ <- step3
} yield ()
在我们的情况下,step3
取决于step1
和step2
,因此我们不希望step3
在step1
和{{{{}}之前运行1}}完成。但step2
和step1
是独立的。上面的理解有点不足,因为step2
在step2
完成之前不会开始。我如何表达这种独立性?
我一直在寻找类似step1
的内容,它会从scala.concurrent.Future.sequence
转换为Seq[IO[A]]
。更好的是从IO[Seq[A]]
转换为(IO[A], IO[B])
。有没有办法实现这个目标?
答案 0 :(得分:0)
我想我找到了它。这似乎有效:
implicitly[cats.Cartesian[IO]].product(step1, step2)
(返回IO[(Unit, Unit)]
。)
编辑:更简洁:
import cats.implicits._
step1.product(step2)
答案 1 :(得分:0)
在third paragraph of the README中,它明确指出cat-effect库不处理并发或并行。