Obviamente, este não foi exatamente o meu caso de uso, mas aqui está o MCVE, demonstrando o problema:
def bad = {
val in: ZLayer[Any, Any, String] = null
val layer: ZLayer[String with Int with Double, Any, Double] = null
val out: ZLayer[Any & Int, Any, Double] = in >>> layer
}
Isso deve funcionar, certo? Intellij concorda e diz que está tudo certo... até você clicar em compilar. O compilador diz:
found : zio.ZLayer[String with Int with Double,Any,Double]
required: zio.ZLayer[String with Any with Int,Any,Double]
O que??? Por que?
Curiosamente, se você alterar o primeiro Double
para a String
(ou para qualquer outra coisa, se você ajustar o out
tipo), funcionará bem:
def good = {
val in: ZLayer[Any, Any, String] = null
val layer: ZLayer[String with Int with String, Any, Double] = null
val out: ZLayer[Any & Int, Any, Double] = in >>> layer
}
Alguma ideia? Estou começando a pensar, isso é um bug do compilador?