// COMPILATION_ERRORS

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.<T : (a) -> 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.<T : (a) -> b>(a : foo) : bar;

val d = fun () = a
val d = fun name() = a
val a = @[a] fun ()

val b = fun <T> () 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.<T :  (a) -> b>(a : foo) : bar {})

    bar {fun @[a()] T.<T : @[a]  (a) -> b>(a : foo) : bar {}}

    bar {fun A?.() : bar?}
    bar {fun A? .() : bar?}

    bar(fun () = a)
    bar(fun name() = a)
    bar(@[a] fun name() = a)
}
