나는과 같이 세 단계가 계산을 가지고 :두 개의 cats.effect.IO 모나드에 대해 비 엄격한 정렬을 어떻게 달성합니까?
이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
이므로 및 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]]로 변환합니다. –