File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ object Example extends App {
2+
3+ trait Has [A ]
4+
5+ trait ZIO [- R ] {
6+ def provideLayer [R0 , R1 <: Has [_]](
7+ layer : ZLayer [R0 , R1 ]
8+ )(implicit ev : R1 <:< R ): ZIO [R0 ] =
9+ ???
10+ }
11+
12+ trait ZLayer [- RIn , + ROut <: Has [_]] {
13+ def ++ [RIn2 , ROut1 >: ROut <: Has [_], ROut2 <: Has [_]](
14+ that : ZLayer [RIn2 , ROut2 ]
15+ ): ZLayer [RIn with RIn2 , ROut1 with ROut2 ] = ???
16+ }
17+
18+ trait RandomService
19+ trait SizedService
20+
21+ type Random = Has [RandomService ]
22+ type Sized = Has [SizedService ]
23+
24+ def random : ZLayer [Random , Random ] = ???
25+ def sized : ZLayer [Any , Sized ] = ???
26+
27+ lazy val zio : ZIO [Random with Sized ] = ???
28+
29+ // Okay on Scala 2, does not compile on Dotty
30+ lazy val eliminated : ZIO [Random ] =
31+ zio.provideLayer(random ++ sized)
32+
33+ // Compiles on Dotty with an explicit type annotation
34+ lazy val eliminated2 : ZIO [Random ] =
35+ zio.provideLayer[Random , Random with Sized ](random ++ sized)
36+
37+ println(" It compiles!" )
38+ }
You can’t perform that action at this time.
0 commit comments