Я предполагаю, что порядок параметров такой же, как в EitherT
форме Scala Cats : EitherT[F[_], A, B]
по сути является просто оберткой вокруг F[Either[A, B]]
.
Аналогично, OptionT[F, A]
- это обертка вокруг F[Option[A]]
.
Таким образом,
OptionT[EitherT[Future, Error, ?], A]
это обёртка вокруг
EitherT[Future, Error, Option[A]]
который в свою очередь является оберткой вокруг
Future[Either[Error, Option[A]]]
Следовательно,
OptionT[EitherT[Future, Error, ?], User](
EitherT[Future, Error, Option[User]](retrieveUser(oldEmail))
)
должен проверять тип (с the non/kind-projector
), а с -Ypartial-unification
типы также должны выводиться автоматически, так что вы можете попробовать использовать
OptionT(EitherT(retrieveUser(oldEmail))
внутри для понимания.