> On Feb 24, 2017, at 9:26 PM, Daniel Duan <dan...@duan.org> wrote:
> 
> Before I start revising this proposal, there are a couple of open questions 
> I’d like to discuss with the community and the core team.
> 
> The first question relates to the purpose of having a “internal” argument 
> name. There are applications of such names in GADT (if we ever get there) and 
> perhaps the case-as-subtype-of-the-enum stories on the list right now. Out 
> side of these scenarios, however, such names has few chances to be used. The 
> one I can come up with, which is also the “open” part of the question, is 
> this: we can use the internal names in pattern matching, as opposed to using 
> the labels. This seems to align with the subtyping/GADT use cases. Is this a 
> desirable outcome?

Why would GADTs make internal argument names useful? They seem completely 
useless to me. Their "internal"-ness is compromised if you try to hang 
semantics off of them—they shouldn't have any impact on use sites.

> The second open question is the syntax for “overloaded” cases. If we decide 
> to allow them, what should the patterns matching them look like? I can think 
> of one obvious-ish design where we make the pattern look like the declaration 
> and require types for disambiguation. So the most verbose form of pattern 
> would look something like
> 
> ```
> case let .baseName(label0 name0: Type0, label1 name1: Type1)
> ```

By "overloaded", do you mean "same name different types", or "same base name, 
different argument names"? I think we should have a consistent naming model 
where the latter is never considered overloading. As an affordance to make 
pattern matching more concise, it seems reasonable to me to maybe say that a 
binding pattern matches a label with the same name, so that `case .foo(let bar, 
let bas)` can match `.foo(bar:bas:)`.

-Joe
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to