val a = fun )
val a = fun foo)

val a = fun @[a] T.foo(a : ) : bar

val a = fun @[a()] T.foo<>(a : foo) : bar
val a = fun @[a()] T.<>(a : foo) : bar

val a = fun T.foo<T, , T>(a : foo) : bar
val a = fun T.foo<, T, , T>(a : foo) : bar
val a = fun T.foo<T, T>(, a : foo, , a: b) : bar

val a = fun foo() : = a;

val public_fun = public fun ()
val open_fun = open fun ()
val final_fun = final fun ()

val where_fun = fun () where T: V
fun where_fun() = fun () where T: V

fun outer() {
    bar(fun )

    bar(fun T)
    bar(fun T.)
    bar(fun @[a])


    bar(public fun ())
    bar(open fun ())
    bar(final fun ())

    bar(fun () where T: V)
}