Scala 如何实现两个cats.effect.IO单子的非严格排序?
我的计算有三个步骤,如下所示:Scala 如何实现两个cats.effect.IO单子的非严格排序?,scala,scala-cats,Scala,Scala Cats,我的计算有三个步骤,如下所示: 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 () val c:IO[Unit]=for{ _我想我
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 ()
val c:IO[Unit]=for{
_我想我找到了。这似乎有效:
implicitly[cats.Cartesian[IO]].product(step1, step2)
(返回一个IO[(单位,单位)]
)
编辑:更简洁地说:
import cats.implicits._
step1.product(step2)
我想我找到了。这似乎有效:
implicitly[cats.Cartesian[IO]].product(step1, step2)
(返回一个IO[(单位,单位)]
)
编辑:更简洁地说:
import cats.implicits._
step1.product(step2)
在中,它明确声明cats效果库不处理并发或并行。在中,它明确声明cats效果库不处理并发或并行。更简洁地写为cats.Cartesian[IO]。产品(step1,step2)
类似,同样有用的还有cats.Applicative[IO].sequence
。将Seq[IO[a]]
转换为IO[Seq[a]]
。更简洁地写为cats.Cartesian[IO]。product(step1,step2)
类似,同样有用的是cats.Applicationive[IO]。sequence
将Seq[a]
转换为IO[Seq[a]
。