私はそうのように、3つのステップを持っている計算を持っている:、2つのcats.effect.IOモナドに対して非厳密な順序付けを行うにはどうすればよいですか?
val c: IO[Unit] = for {
_ <- step1
_ <- step2
_ <- step3
} yield()
我々のケースでstep3
は、両方のstep1
に依存し:
import cats.effect.IO
def step1: IO[Unit] = ???
def step2: IO[Unit] = ???
def step3: IO[Unit] = ???
私が理解するための単純なを使用して順次それらを一緒に組み合わせることができますstep2
ですので、とstep2
の両方が完了するまでstep3
を実行したくありません。しかし、step1
とstep2
は独立しています。 step2
はstep1
が完了するまで開始されないため、上記の理解は少し不十分です。この独立性をどのように表現するのですか?
私はscala.concurrent.Future.sequence
のようなものを探していましたが、これはSeq[IO[A]]
からIO[Seq[A]]
に変換されます。 (IO[A], IO[B])
からIO[(A, B)]
に変換するものがさらに優れています。これを達成する方法はありますか?
'cats.Cartesian [IO] .product(step1、step2)' –
と同様に簡潔に書かれており、 'cats.Applicative [IO] .sequence'も同様です。 'Seq [IO] 'を' IO [Seq [A]]に変換します。 –