Как поднять \/[Error, Int]
в EitherT[Future, Error, Int]
с использованием синтаксиса point/liftM
так, чтобы лифт находился справа?
У меня есть следующий сценарий
for {
r1 <- f1: EitherT[Future, Error, Int]
r2 <- v: \/[Error, Int]
r3 <- f2: EitherT[Future, Error, Int]
} yield r3
Iможно сделать v
подгонку, применив EitherT.fromDisjunction[Future]
примерно так
for {
r1 <- f1
r2 <- EitherT.fromDisjunction[Future](v)
r3 <- f2
} yield r3
или просто
for {
r1 <- f1
r2 <- EitherT(Future(v))
r3 <- f2
} yield r3
, однако я пытаюсь переместить подъемную магию ксправа от v
вроде так
for {
r1 <- f1
r2 <- v.point[Future].liftM[EitherT] // something approximately like this
r3 <- f2
} yield r3
я пробовал
type Result[F[_], A] = EitherT[F, Error, A]
v.point[Future].liftM[Result]
и
v.point[({ type L[x] = EitherT[Future, Error, x] })#L]
предложил здесь и здесь , однако это тип
EitherT[Future, Error, Error \/ Int]
, в то время как мне требуется
EitherT[Future, Error, Int]
Перемещение подъема вправо - только для эстетики, как EitherT.fromDisjunction[Future]
отлично работает.