> 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 
<https://en.wikipedia.org/wiki/Generalized_algebraic_data_type> (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] <mailto:[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 
> <https://github.com/lostatseajoshua/swift-evolution/blob/master/NNNN-enum-generic-cases.md>
> Authors: Joshua Alvarado <https://github.com/alvaradojoshua0>
> Review Manager: TBD
> Status: PITCH
> During the review process, add the following fields as needed:
> 
> Decision Notes: Rationale 
> <https://lists.swift.org/pipermail/swift-evolution/>, Additional Commentary 
> <https://lists.swift.org/pipermail/swift-evolution/>
> Bugs: SR-NNNN <https://bugs.swift.org/browse/SR-NNNN>, SR-MMMM 
> <https://bugs.swift.org/browse/SR-MMMM>
> Previous Revision: 1 
> <https://github.com/apple/swift-evolution/blob/...commit-ID.../proposals/NNNN-filename.md>
> Previous Proposal: SE-XXXX 
> <https://github.com/lostatseajoshua/swift-evolution/blob/master/XXXX-filename.md>
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#introduction>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 
> <https://lists.swift.org/pipermail/swift-evolution/>
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#motivation>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.
> 
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#proposed-solution>Proposed
>  solution
> 
> The generic is to be casted on the case of the enum and not on the enum 
> itself.
> 
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#detailed-design>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")
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#source-compatibility>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.
> 
>  
> <https://github.com/lostatseajoshua/swift-evolution/tree/master#alternatives-considered>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 
> <https://github.com/lostatseajoshua/swift-evolution/blob/master/NNNN-enum-generic-cases.md>
> 
> -- 
> Joshua Alvarado
> [email protected] <mailto:[email protected]>
> _______________________________________________
> swift-evolution mailing list
> [email protected] <mailto:[email protected]>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> 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

Reply via email to