package test internal interface A { fun run(): T; } internal inline fun bar(crossinline y: () -> String) = object : A { override fun run() : String { return call(y) } } public inline fun call(crossinline f: () -> T): T = object : A { override fun run() : T { return f() } }.run()