У меня есть простые методы:
def retrieveRepositories(url: String, params: String): IO[HttpResponse] = Hammock.getWithOpts(uri"$url", createOpts).exec[IO]
Который является http-клиентом. и json
декодер:
implicit def decodeResponseEntity(response: HttpResponse): Either[CodecException, List[GitRepository]] = Decoder[List[GitRepository]].decode(response.entity)
Теперь я хочу назвать этот клиент следующим образом:
def getRepos(organization: String, params: String): F[Either[CodecException, List[GitRepository]]] = for {
res <- retrieveRepositories(organization, params)
result <- Sync[F].delay(decodeResponseEntity(res))
} yield result
Но есть проблема со строкой result <- Sync[F].delay(decodeResponseEntity(res))
, потому что я получилошибка: Type mismatch. Reguired: IO[B_] but found F[Either[CodecException, List[GitRepository]]]
. Когда я добавляю unsafeRunSync()
метод к retrieveRepositories(organization, params)
, он работает нормально, но я должен вызывать этот метод в конце, а не здесь. Как мне это исправить?