Я хотел бы добавить ответ к прервать в начале сгиба для ZIO .
Итак, я принял решение с кошками: Решение для кошек
def sumEvenNumbers(nums: Stream[Int]): Option[Long] = {
import cats.implicits._
nums.foldM(0L) {
case (acc, c) if c % 2 == 0 => Some(acc + c)
case _ => None
}
}
Как этого добиться с помощью ZIO ?
Ближайшее, что я получил:
new DefaultRuntime {}
.unsafeRun(sumEvenNumbers(List(2,4,6,3,5,6)))
def sumEvenNumbers(nums: Iterable[Int]): ZIO[Any, Nothing, Int] = {
stream.Stream.fromIterable(nums)
.run(Sink.fold(0)(s => s % 2 == 0) { (a: Int, b: Int) => (a + b, Chunk.empty)
})
}
Но это дает мне: 15
вместо 12
. Так что похоже на короткое замыкание, но это занимает слишком много. И это Int
не Option[Int]
.