Общий способ вызова getOrElse для монад - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в библиотеке 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)

Как я могу сделать это функционально?

...