Scala Cats OptionT с любым из них.Как создать значение ошибки? - PullRequest
0 голосов
/ 01 июня 2018

Я работаю через превосходную Scala с Cats , и я не уверен насчет трансформаторов Monad.В частности, есть пример, который выглядит так:

type ErrorOr[A] = Either[String, A]
type ErrorOrOption[A] = OptionT[ErrorOr, A]
val a = 10.pure[ErrorOrOption] // a: OptionT(Right(Some(10)))
val b = 32.pure[ErrorOrOption] // b: OptionT(Right(Some(32)))
val c = a.flatMap(x => b.map(y => x + y)) // c: OptionT(Right(Some(42)))
  • Как создать пустую опцию?

    // d: OptionT(Right(None))
    
  • Как создатьзначение ошибки?

    // e: OptionT(Left("A terrible error."))
    
  • Правильно ли, что если бы я отобразил эти значения, распространяемое значение было бы левым?

Спасибо.

1 Ответ

0 голосов
/ 01 июня 2018

Я понял, мне нужно было использовать apply.

val e = OptionT[ErrorOr, Int](Right(None))
val d = OptionT[ErrorOr, Int](Left("A terrible error."))
val f = for {
    e1 <- d
    e2 <- e
  } yield e1 + e2 // f: OptionT(Left(A terrible error.))

val g = 10.pure[ErrorOrOption]
val h = OptionT[ErrorOr, Int](Right(None))
val i = for {
    e1 <- g
    e2 <- h
  } yield e1 + e2 // i: OptionT(Right(None))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...