Scala - Как объединить EitherT с любым из них для понимания - PullRequest
0 голосов
/ 30 августа 2018

Предположим, у меня есть следующие настройки:

def foo: Either[Error, A] = ???
def bar: EitherT[Future, Error, B] = ???
case class Baz(a: A, b: B)

Как я могу использовать для понимания, чтобы создать экземпляр класса Baz? Я пробовал с:

val res = for {
  a <- foo
  b <- bar
} yield Baz(a, b)

но результат имеет тип Either[Error, Nothing]. Я не знаю, какой правильный тип возврата в этом случае, но, очевидно, я не хочу Nothing ...

Как правильно комбинировать Either и EitherT для понимания?

1 Ответ

0 голосов
/ 30 августа 2018

Используйте функцию EitherT.fromEither для создания EitherT из Either

import cats.data._
import cats.implicits._

def foo[A]: Either[Error, A] = ???
def bar[B]: EitherT[Future, Error, B] = ???
case class Baz[A, B](a: A, b: B)

def res[A, B] = for {
  a <- EitherT.fromEither[Future](foo[A])
  b <- bar[B]
} yield Baz(a, b)
...