Okay I will resubmit after post Swift 4.0 scope is discussed. Thanks! Alvarado, Joshua
> On Apr 25, 2017, at 11:08 AM, Douglas Gregor <[email protected]> wrote: > > >> On Apr 24, 2017, at 12:57 PM, Joshua Alvarado <[email protected]> >> wrote: >> >> When would be a good time to resubmit this proposal for discussion? > > Sometime in the summer we’re going to start talking about the scope of Swift > post-4.0. > >> Or can I still proceed with the review and it possibly gets deferred but at >> least be put in the pipeline (if deferred)? > > We try not to let the review process get *too* far ahead of the actual > implementation, because detailed design review for acceptance is itself a > time-consuming process. > > - Doug > >> >>> On Mon, Apr 24, 2017 at 9:07 AM, Douglas Gregor <[email protected]> wrote: >>> >>>> On Apr 24, 2017, at 7:23 AM, T.J. Usiyan via swift-evolution >>>> <[email protected]> wrote: >>>> >>>> /me Pushes implementation detail related concerns out of head >>>> >>>> +1 >>>> >>>> >>>> I want this feature but I seriously doubt that it is feasible at the >>>> moment. There are so many 'more pressing' features that, even if this were >>>> accepted now, it wouldn't be implemented it in time for Swift 4. >>> >>> Out of scope for Swift 4, certainly. It may not look like it, but this is a >>> fairly large feature. I suggest reading up on generalized algebraic data >>> types (GADTs), which is the more programming-language-theoretical name for >>> what you’re describing here. >>> >>> - Doug >>> >>>> >>>> That said, I would love to be incorrect. >>>> >>>>> On Mon, Apr 24, 2017 at 9:57 AM, Joshua Alvarado via swift-evolution >>>>> <[email protected]> wrote: >>>>> Here is my pitch on adding generics to enum cases and not to the enum >>>>> type itself. Let me know if you have an improvements or modifications >>>>> lets open it to discussion thank you swiftys! :) >>>>> Enum with generic cases >>>>> Proposal: SE-NNNN >>>>> Authors: Joshua Alvarado >>>>> Review Manager: TBD >>>>> Status: PITCH >>>>> During the review process, add the following fields as needed: >>>>> >>>>> Decision Notes: Rationale, Additional Commentary >>>>> Bugs: SR-NNNN, SR-MMMM >>>>> Previous Revision: 1 >>>>> Previous Proposal: SE-XXXX >>>>> Introduction >>>>> >>>>> This proposal adds a change to the enumeration type that allows an enum >>>>> case to cast a generic on its associated value. >>>>> >>>>> Swift-evolution thread: Discussion thread topic for that proposal >>>>> >>>>> Motivation >>>>> >>>>> Enums currently support generics, but they are added onto the type >>>>> itself. This can cause adverse syntax when implementing generics for >>>>> associated values to be stored along each case. The enum case holds the >>>>> associated value (not the enum type itself) so should create its own >>>>> value constraints. >>>>> >>>>> Proposed solution >>>>> >>>>> The generic is to be casted on the case of the enum and not on the enum >>>>> itself. >>>>> >>>>> Detailed design >>>>> >>>>> Current implementation: >>>>> >>>>> // enum with two generic types >>>>> enum Foo<T: Hashable, U: Collection> { >>>>> case bar(obj: T) >>>>> case baz(obj: U) >>>>> } >>>>> >>>>> // U is to be casted but it is not even used >>>>> let foo: Foo<String, [String]> = .bar(obj: "hash") >>>>> >>>>> // Creating an optional enum, the generics have to be casted without a >>>>> value set >>>>> // The casting is really not needed as the values should be casted not >>>>> the enum >>>>> var foo1: Foo<String, [String]>? >>>>> >>>>> // Collections don’t look great either >>>>> var foos = [Foo<String, [String]>]() >>>>> foos.append(.bar(obj:"hash")) >>>>> Proposed solution >>>>> >>>>> enum Foo { >>>>> case bar<T: Hashable>(obj: T) >>>>> case baz<U: Collection>(obj: U) >>>>> } >>>>> >>>>> // generic type inferred on T >>>>> var foo: Foo = .bar(obj: "hash") >>>>> >>>>> // doesn’t need to cast the generic on the optional enum >>>>> // the associated value will hold the cast >>>>> var foo1: Foo? >>>>> >>>>> // This also gives better syntax with collections of enums with >>>>> associated types >>>>> var foos = [Foo]() >>>>> foos.append(.bar(obj: "hey") >>>>> Source compatibility >>>>> >>>>> This may cause subtle breaking changes for areas in code with generic >>>>> enum cases. The compiler could help with the change by finding the >>>>> associated generic and updating the case with the new syntax. >>>>> >>>>> Alternatives considered >>>>> >>>>> An alternative would be to extend the associatedtype keyword to the enum >>>>> type. >>>>> >>>>> enum Foo { >>>>> associatedtype T = Hashable >>>>> case bar(obj: T) >>>>> } >>>>> >>>>> Copy of proposal can be found here Swift proposal on github >>>>> >>>>> -- >>>>> Joshua Alvarado >>>>> [email protected] >>>>> >>>>> _______________________________________________ >>>>> swift-evolution mailing list >>>>> [email protected] >>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>> >>>> >>>> _______________________________________________ >>>> swift-evolution mailing list >>>> [email protected] >>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> >> >> >> >> -- >> Joshua Alvarado >> [email protected] >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
