val a = fun () val a = fun name() val a = fun T.name() val a = fun @[a] T.(a : foo) : bar val a = fun @[a] T.name(a : foo) : bar val a = fun @[a()] T. b>(a : foo) : bar fun c() = fun (); fun c() = fun name(); fun c() = fun @[a] T.(); fun c() = fun @[a] T.(a : foo) : bar; fun c() = fun @[a()] T. b>(a : foo) : bar; val d = fun () = a val d = fun name() = a val a = @[a] fun () val b = fun () where T: A fun outer() { bar(fun () {}) bar(fun name() {}) bar(fun @[a] T.() {}) bar(fun @[a] T.name() {}) bar(fun @[a] T.(a : foo) : bar {}) bar(fun @[a()] T. b>(a : foo) : bar {}) bar {fun @[a()] T. b>(a : foo) : bar {}} bar {fun A?.() : bar?} bar {fun A? .() : bar?} bar(fun () = a) bar(fun name() = a) bar(@[a] fun name() = a) }