将 Type1: EitherT[Future, String, Int] 转换为 Type2: EitherT[Future, String, Option[Int]] 而 Type1 中的所有 Left 都变为 Type2 中的 Right(None)
Convert Type1: EitherT[Future, String, Int] to Type2: EitherT[Future, String, Option[Int]] while all the Left in Type1 become Right(None) in Type2
假设我有一个:
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)))
我想这样做的原因是如果你有左手,for comprehension 将立即结束。所以我想把左转成右(None)来继续理解。
经过一些尝试,我找到了答案(使用折叠):
val converted = EitherT(origin.fold(_ => Right(None), num => Right(Some(num))))
假设我有一个:
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)))
我想这样做的原因是如果你有左手,for comprehension 将立即结束。所以我想把左转成右(None)来继续理解。
经过一些尝试,我找到了答案(使用折叠):
val converted = EitherT(origin.fold(_ => Right(None), num => Right(Some(num))))