Scala 将Type1:EitherT[Future,String,Int]转换为Type2:EitherT[Future,String,Option[Int]],同时Type1中的所有左边在Type2中变为右边(None)

Scala 将Type1:EitherT[Future,String,Int]转换为Type2:EitherT[Future,String,Option[Int]],同时Type1中的所有左边在Type2中变为右边(None),scala,scala-cats,Scala,Scala Cats,假设我有一个: val origin_left: EitherT[Future, String, Int] = EitherT.fromEither[Future](Left("some-error")) val origin_right: EitherT[Future, String, Int] = EitherT.fromEither[Future](Right(100)) 我想把它转换成 val converted_left: EitherT[Future, Stri

假设我有一个:

val origin_left: EitherT[Future, String, Int] = EitherT.fromEither[Future](Left("some-error"))
val origin_right: EitherT[Future, String, Int] = EitherT.fromEither[Future](Right(100))
我想把它转换成

val converted_left: EitherT[Future, String, Option[Int]] = EitherT.fromEither[Future](Right(None))
val converted_right: EitherT[Future, String, Option[Int]] = EitherT.fromEither[Future](Right(Some(100)))

我想这样做的原因是,如果你有一个左,理解的过程将立即结束。因此,我想将左侧转换为右侧(无),以继续进行理解。

经过一些尝试,我找到了答案(使用折叠):


经过一些尝试,我找到了答案(使用fold):

val converted = EitherT(origin.fold(_ => Right(None), num => Right(Some(num))))