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

Reply via email to