Interesting to see Typescript style intersection type syntax.
Reading the context receiver change, did Kotlin just casually implement an effects system in a minor version release??
Whats the benefit of this? It looks like it would just be solved by dependency injection.
An effects system would solve the same problem that most dependency injection does. Having it at the language level gives you some benefits, chief of which is that you're writing Kotlin code, and not either some bespoke DSL, or worse XML.
In the given example where is logger actually instantiated/mocked/setup?