Monad IO catchAll оператор ведет себя
Я изучаю монадный ввод-вывод scalaZ и не могу понять, как работают операторы catchAll и catchSome. Я ожидал увидеть поведение как onError или onErrorrResumeNext RxJava, но вместо этого не перехватывает throwable, а просто прерывает тест и выдает исключение NullPointerException..
Вот мои два примера
@Test
def catchAllOperator(): Unit = {
val errorSentence: IO[Throwable, String] =
IO.point[Throwable, String](null)
.map(value => value.toUpperCase())
.catchAll(error => IO.fail(error))
println(unsafePerformIO(errorSentence))
}
И поймать какой-то пример
@Test
def catchSomeOperator(): Unit = {
val errorFunction = new PartialFunction[Throwable /*Entry type*/ , IO[Throwable, String] /*Output type*/ ] {
override def isDefinedAt(x: Throwable): Boolean = x.isInstanceOf[NullPointerException]
override def apply(v1: Throwable): IO[Throwable, String] = IO.point("Default value")
}
val errorSentence = IO.point[Throwable, String](null)
.map(value => value.toUpperCase())
.catchSome(errorFunction)
println(unsafePerformIO(errorSentence))
}
Есть идеи, что я делаю не так?
С уважением