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))

  }

Есть идеи, что я делаю не так?

С уважением

0 ответов

Другие вопросы по тегам