Agreed, specifically it creates ambiguities in parsing (for computers but worse: for humans). Given Foo(x), you can’t tell if it’s a function call or a generic type without knowing what x refers to. You need context from afar to disambiguate.
a := Bar(baz)(buzz)
Is Bar a `func(some) func(thing) other` or is it a `func(type T)(some) other`? You need to know what “baz” is to be able to tell.You usually won't see much of either sinice the type argument is only necessary when it can't be inferred.
Is that a function that returns a function or a generic Reverse function specialized over type x, invoked with argument y?
I've always been a big advocate for unambiguous, clear code, especially in Go, but I don't see a big potential for confusion here.