Поднятие будущего с использованием EitherT.liftF, когда ценность уже является будущим - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть такое значение:

val ss: Option[Future[List[Either[Error, File]]]]

И я хочу поднять это значение до EitherT.liftF[Future, Error, List[Either[Error, File]]], поэтому я сделал следующее:

    ss match {
      case Some(value) => EitherT.liftF[Future, Error, List[Either[Error, File]]](value)
      case None        => EitherT.leftT[Future, List[Either[Error, File]]](Error("failed"))
    }

Мой вопрос заключается в том, является ли правильным, что я могу использовать EitherT.liftF для подъема значения, которое уже является будущим, потому что я думаю, что обычно оно используется для значений, которые необходимо перенести в будущее, а не для того, которое само является будущим.

1 Ответ

0 голосов
/ 26 февраля 2020

Future имеет Monad экземпляр по практическим соображениям, но не является действительно законным. См. Этот пост в топи c.

Однако во многих случаях, таких как ваш, он все равно будет работать так, как ожидалось.

Вы также можете реализовать его следующим образом:

EitherT(ss.toRight(Error("failed")).sequence)
...