interface IA interface IB interface IC object Host : IB object Prop : IA { val Host.foo: Callee get() = Callee } object Callee object Invoke : IC { operator fun Callee.invoke() { } } fun test(a: IA, b: IB, c: IC) { with(a) lambdaA@{ with(b) lambdaB@{ with(c) lambdaC@{ if (this@lambdaA is Prop && this@lambdaB is Host && this@lambdaC is Invoke) { foo() } } } } }