Scala-如何将EitherT和Either中的任何一个结合起来以进行理解

时间:2018-08-29 22:35:49

标签: scala scala-cats

假设我具有以下设置:

renderToString(
  <DeviceTypeContext.Provider value={someVariable}>
    <App />
  </DeviceTypeContext.Provider>,
  ...
);

如何使用理解来实例化类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] ...

结合NothingEither进行理解的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

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