I'm not quite convinced of these problems.
What is a use case where a type would define both func call and a call member?
I also wonder when/how often it's necessary to disambiguate overloaded call members via explicit casting. I don't particularly see a reason to store let x = foo.call in an intermediate variable. When applying foo(...) directly, overload resolution based on arguments' types should be sufficient (unless result types are overloaded).
I do generally agree with this sentiment of uniformly treating callables like functions.
Is your idea to support explicit casting to function types via as, and to not support implicit conversion? If I understood you correctly, that is an interesting direction and avoids implicit conversion complications.
Thanks for your perspective! I think @allevato made some great points in the pitch thread that are relevant to your response:
Context-capturing functions and closures are great for certain use cases. But mutable state and application are often encapsulated as nominal types with instance methods. Call-syntax sugar for instance methods representing "function application" is valuable.
Instead of using the verb "call", I would think in terms of "application": applying a parser, machine learning model, or polynomial function. Application (of the primary, function-like behavior) of these constructs does make sense.
This proposal simply presents a syntactic sugar: foo(x: 1, 2, 3) is rewritten as an instance member application foo.call(x: 1, 2, 3). Such sugars are not related to the type system significance of function argument labels.