On Dec 27, 2015, at 4:09 PM, John McCall <[email protected]> wrote:
>> I’m a fan of good error recovery, but I don’t think it is a major concern 
>> here for two reasons:
>> 
>> 1) The most common case in a method will lack a label, and "thing.foo(_: “ 
>> and “thing.foo(:” are both unambiguously a curried reference.
>> 2) A common case of accidentally completing a nullary call (thing.foo() vs 
>> thing.foo) will produce a type error.  We already produce good QoI for an 
>> unapplied function - adding the inverse would be simple.
>> 
>> Further, it will be uncommon *in general* to form a curried reference, so 
>> error recovery doesn’t have to be perfect in all the edge cases.  As with 
>> other commenters, if it is at all possible to avoid the extra backticks, I’d 
>> really prefer that.
> 
> The concern, I think, is that a messed-up normal call might look like a 
> curried reference.
> 
> My inclination would be to go the other way: if we get a syntax for this that 
> we like, I think we should use it for *all* curried member references, and 
> reject things like foo.bar in favor of foo.`bar`.  The ability to write 
> foo.bar for a method has always struck me as more clever than wise, to be 
> honest.

If you were to go that far, I’d suggest looking at this as a different version 
of the “." operator.  If you resyntax curried to something else like (just a 
strawman, intentionally ugly syntax):

        foo.#bar

Then you’d get a nice property that the plain old dot operator always has to be 
fully applied.  This certainly would be a win for error recovery.  Also, if you 
did this, you wouldn’t need the backticks from doug’s proposal either for 
things like:

        foo.#bar(param1:param2:)

either.

-Chris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to