Scala, ZIO - какая-то странная проблема со слоями в ZIO - PullRequest
1 голос
/ 27 апреля 2020

Я создал простой собственный тип: type MyEnv = ZEnv with Clock with MyRepository

и имею метод Main:

object Main extends App {
  lazy val live: ZLayer[Any, Nothing, Has[MyRepository.Service]] = ZLayer.succeed(LiveMyRepository.repository)

  val routes = Router[AppTask](
    "/" -> MyRoutes.routes
  ).orNotFound

  val server: ZIO[MyEnv, Throwable, Unit] = ZIO.runtime[MyEnv]
    .flatMap {
      implicit rts =>
        BlazeServerBuilder[AppTask]
          .bindHttp(config.port, config.host)
          .withHttpApp(routes)
          .serve
          .compile
          .drain
    }

  def run(args: List[String]): ZIO[ZEnv, Nothing, Int] = {
    server.provideCustomLayer(live) foldM(
      err => putStrLn(s"Execution failed with: $err") *> IO.succeed(1),
      _ => IO.succeed(0))
  }

Но я получил ошибку компиляции в методе run:

Error:(33, 30) Cannot prove that zio.ZEnv with zio.Has[my.repositories.MyRepository.Service] <:< my.application.Environment.MyEnv.
    server.provideCustomLayer(live) foldM(

Я не знаю, как это исправить. Также у меня есть ошибка, связанная с неявным в server.provideCustomLayer(live):

No parameter found for implicits ev: ZEnv with Has[MyRepository.Service] <:< MyEnv

Я пытался найти решение, но документация ZIO настолько бесполезна, и в других местах нет хорошего решения.

...