Либо в Scala не работает с Для понимания - PullRequest
0 голосов
/ 29 января 2020

У меня есть этот код:

 (for {
      oldResult <- EitherT[Future, A, B](getById(id))
      newResult <- EitherT.right(update(changeOldData(oldResult)))
    } yield newResult).value

Где функции возвращают

 getById       -> Future[Either[A, B]]
 update        -> Future[B]
 changeOldData -> B

Предполагается, что весь блок возвращает:

Future[Either[A, B]]

В IntelliJ, к приведенному выше коду претензий нет, но при компиляции я получаю следующую ошибку:

[error]  found   : B => cats.data.EitherT[scala.concurrent.Future,Nothing,B]
[error]  required: B => cats.data.EitherT[scala.concurrent.Future,A,B]
[error]           oldResult <- EitherT[Future, A, B](

Я пытался не включать тип, и я получаю ту же ошибку. Есть идеи почему?

1 Ответ

2 голосов
/ 29 января 2020

Когда вы вызываете EitherT.right(..), компилятор не может понять, каким должен быть левый тип вашего. Вот почему в сообщении об ошибке говорится, что он обнаружил Nothing вместо A. Вам нужно немного помочь.

EitherT.right[A](update(changeOldData(oldResult)))

Это скомпилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...