My apologies for misunderstanding. Would it be better to add the anonymous case feature in a separate proposal? It stands alone as a new addition to enum. The intent for this proposal is bringing enum's syntax closure to other part of Swift.
Daniel Duan Sent from my iPhone > On Feb 21, 2017, at 1:15 AM, Dave Abrahams via swift-evolution > <swift-evolution@swift.org> wrote: > > I had not intended for _ to be an ordinary identifier, but as a way of > spelling the empty case name. Ambiguous cases, not distinguished by either > full name or payload type, would be errors. How to construct anonymous cases? > I guess it would be MyEnum(expression) > > Sent from my moss-covered three-handled family gradunza > >> On Feb 19, 2017, at 2:52 PM, Daniel Duan <dan...@duan.org> wrote: >> >> >>>> On Feb 19, 2017, at 11:49 AM, Matthew Johnson via swift-evolution >>>> <swift-evolution@swift.org> wrote: >>>> >>>> >>>> On Feb 18, 2017, at 10:49 PM, Dave Abrahams via swift-evolution >>>> <swift-evolution@swift.org> wrote: >>>> >>>> I'm on vacation and don't have time for a full review right now, but I am >>>> concerned that wild this proposal would make enums more general and >>>> uniform with the rest of the language , they also would become much more >>>> awkward for common use cases. I have recently been very pleased that I >>>> didn't have to supply labels in switch statements where the label name >>>> would simply have matched the name of the variable to be bound. This >>>> looks needlessly verbose: >>>> >>>> case .valid(value: let value, resumptionPoint: let resumptionPoint): >>>> >>>> I cannot imagine a real life use case where one would have labels in the >>>> case and desire to bind associated values to variables having different >>>> names than the labels. >>> >>> I agree with this, but I think it’s an issue we can solve (perhaps as an >>> amendment to this proposal). >>> >>> First, I think Brent’s idea of introducing an argument label that can be >>> distinct from the “property” name of the case is a good one. I think we >>> should do this. It takes the parallel with function signatures even >>> further. >>> >>> Second, we should allow the “property” name to be `_`. This would mean no >>> label can be used when matching: >>> >>> case valid(value _: ValueType, resumptionPoint _: PointType) >>> >>> Third, I think we should also allow suers to elide the label if they either >>> discard the value with `_` or bind a name that is identical to the label, >>> so we might have: >>> >>> // declaration: >>> case valid(externalCasConstructorLabel value: ValueType, >>> externalCaseConstructorLabel resumptionPoint: PointType) >>> >>> // match ok: >>> case .valid(let value, let resumptionPoint): >>> >>> // error, names do not match: >>> case .valid(let foo, let bar): >>> >>> // ok, label is used: >>> case .valid(value: let foo, resumptionPoint: let bar): >>> >>> This follows the behavior of function signatures very closely. The >>> external label is used to provide context for the argument at the call site >>> (of the case constructor). The internal name is used to bind a name to the >>> value that is used by code that works with the value. >>> >>> The only exception here is that because the usage site is distant from the >>> case declaration it may wish to use a different name. We allow that, but >>> only if the “internal name” is also used in the pattern. This preserves >>> the ability of a reader of the code to see the name / meaning of the >>> associated value as it was declared by the enum in addition to the name >>> that might make more sense for use in the local context. >>> >>>> >>>> Secondly, I can't imagine a case where one would want to use the same case >>>> basename and different labels. The very common use case where the types of >>>> associated values completely distinguish the case and one would rather not >>>> have to supply a case name at all is completely unaddressed. If my quick >>>> read is not mistaken, this proposal makes it legal for cases to have >>>> different complete names (including base name and labels), but doesn't >>>> make it legal to have the same full name (which I would love to be "_" or >>>> missing in some cases) with different associated value types. If we were >>>> truly following the precedent set by function signatures, wouldn't that be >>>> possible too? >>> >>> +1. I think this makes a lot of sense. It completes the parallel of cases >>> with overloaded functions. >>> >>> I think anonymous cases are a really good idea. I discuss those quite a >>> bit in the value subtyping manifesto I shared last week (I’d love to hear >>> your thoughts on it if / when you have time to take a look). >>> >>> How would you propose that values of anonymous cases be constructed and >>> matched? My solution is to allow them to be constructed by implicit >>> conversion from the associated value type to the enum type and matched by a >>> cast pattern. Is that what you have in mind? I would *really* love to see >>> this someday... >> >> I can’t speak for Dave obviously. But I think he was merely proposing >> “overloaded” form of enum options, in which multiple options may share the >> compound name but with differently associated types. The name “_” would just >> be a normal identifier in such scenario. So it would also be the >> contractor’s function name. >> >>>> >>>> Sent from my moss-covered three-handled family gradunza >>>> >>>>> On Feb 17, 2017, at 5:26 PM, John McCall <rjmcc...@apple.com> wrote: >>>>> >>>>> Hello Swift community, >>>>> >>>>> The review of "SE-0155: Normalize Enum Case Representation" begins now >>>>> and runs through next Friday, February 26th. The proposal is available >>>>> here: >>>>> >>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md >>>>> >>>>> Reviews are an important part of the Swift evolution process. All reviews >>>>> should be sent to the swift-evolution mailing list at >>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>> or, if you would like to keep your feedback private, directly to the >>>>> review manager. When replying, please try to keep the proposal link at >>>>> the top of the message: >>>>> >>>>> Proposal link: >>>>> https://github.com/apple/swift-evolution/blob/master/proposals/0155-normalize-enum-case-representation.md >>>>> >>>>> Reply text >>>>> >>>>> Other replies >>>>> >>>>> What goes into a review? >>>>> >>>>> The goal of the review process is to improve the proposal under review >>>>> through constructive criticism and, eventually, determine the direction >>>>> of Swift. When writing your review, here are some questions you might >>>>> want to answer in your review: >>>>> >>>>> • What is your evaluation of the proposal? >>>>> • Is the problem being addressed significant enough to warrant a change >>>>> to Swift? >>>>> • Does this proposal fit well with the feel and direction of Swift? >>>>> • If you have used other languages or libraries with a similar feature, >>>>> how do you feel that this proposal compares to those? >>>>> • How much effort did you put into your review? A glance, a quick >>>>> reading, or an in-depth study? >>>>> >>>>> More information about the Swift evolution process is available at >>>>> https://github.com/apple/swift-evolution/blob/master/process.md >>>>> >>>>> Thank you, >>>>> >>>>> John McCall >>>>> Review Manager >>>>> _______________________________________________ >>>>> swift-evolution-announce mailing list >>>>> swift-evolution-annou...@swift.org >>>>> https://lists.swift.org/mailman/listinfo/swift-evolution-announce >>>> _______________________________________________ >>>> swift-evolution mailing list >>>> swift-evolution@swift.org >>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> >>> _______________________________________________ >>> swift-evolution mailing list >>> swift-evolution@swift.org >>> https://lists.swift.org/mailman/listinfo/swift-evolution >> > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution