Я новичок в библиотеке scala-cats, Изначально я создал общий код, который объединяет монады в соответствии с моноидом, который я предоставляю:
\\ implicitly uses cats catsDataMonoidForEither
Monoid[Either].combine(Right("foo"), Left(new NullPointerException))
\\ returns: Left(NullPointerException)
\\ implicitly uses a monoid that I provided
Monoid[Option[String]].combine(Some("foo"), Some("bar"), None)
\\ returns: Some("foobar")
Дело в том, что я получаю разные монады (я хочучтобы иметь возможность обрабатывать Validated
и Try
тоже), и я ищу универсальный способ "getOrElse" их в соответствии с предопределенным смещением монады любая абстракция FP, что-то вроде этого:
def getOrEmpty[M, A](monad: M[A])(implicit monadM: Monad[M], monoidA[A]): A = {
// Method "magicallyGetOrElse" is supposed to get a monad,
// if its is the biased side (Some, Right etc.) return the value,
// else return the monad's A
monadM.magicallyGetOrElse(monad)(monoidA.empty)
Как я могу сделать это функционально?