interface B { operator fun invoke(x: Int): String } class A { fun foo(x: Int) { fun baz(x: Double) {} baz(1.0) } val bar: B = TODO() } fun A.foo(x: String) {} fun main() { fun A.foo(x: Double) {} val a = A() a.foo(1) a.foo("") a.foo(1.0) a.bar(1) }