Если я просто использую Option для понимания, все идет так, как ожидалось:
val a = Some(1)
val b = None
val c = Some(3)
val r = for {
aa <- a
bb <- b
cc <- c
} yield aa + bb + cc
println(r) // None, because b is None
, но как добиться того же поведения, используя IO кошек?
import cats.effect.IO
// in reality this will be a methods with side effect
val a = Some(1)
val b = None
val c = Some(3)
val r = for {
_ <- IO{println("a"); a}
_ <- IO{println("b"); b} // want to stop execution here
_ <- IO{println("c"); c}
} yield ()
r.unsafeRunSync()
В результате я получаюa b c
, но я ожидаю только a b
.
Возможно ли достичь?Это правильный способ сделать это?