我有一个简单的方法:
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)
它可以正常工作,但我应该在最后而不是在这里调用这个方法。我应该如何修复它?