interface T { fun foo(a: () -> Any): T = this } fun foo(t: T) { t.foo { 1 } .foo {2} .foo({ 3 }) } /* 1 { 1 } t.foo{...} t.foo{...}.foo{...} t.foo{...}.foo{...}.foo(...) */