> On May 4, 2016, at 4:46 PM, Austin Zheng via swift-evolution 
> <[email protected]> wrote:
> 
> Hello swift-evolution:
> 
> Based on recent conversations on the list, I'd like to float a trial balloon: 
> an "enum class" kind which is analogous to classes in the same way existing 
> enums are to structs. This is a data type which allows the user to define a 
> number of cases, like enums, and can participate in pattern matching and 
> exhaustivity analysis. Instances of an enum class are reference types, which 
> enables (for example) graph nodes with a built-in concept of identity.
> 
> To be slightly more fanciful, perhaps such a kind could be treated as an 
> 'almost-final' class, with each case being a nested type which is defined as 
> a final subclass of the enum class. Cases could then define their own 
> behavior:
> 
> enum class GraphNode {
>   case Node(left: GraphNode, right: GraphNode) {
>     override func foo() { ... }
>     func nodeSpecificMethod() { ... }
>   }
> 
>   case Leaf {
>     override func foo() { ... }
>     func leafSpecificMethod() { ... }
>   }
> 
>   func foo() { ... }
> }
> 
> let x : GraphNode = GraphNode.newEmptyTree()
> let y : GraphNode = GraphNode.Node(l, r)
> let z : GraphNode = GraphNode.Leaf()
> let a : GraphNode.Leaf = GraphNode.Leaf()
> 
> Enum classes would not be subclassible, and extensions would not be able to 
> define new cases (as is the case with normal enums at the present time).
> 
> My superficial analysis seems to suggest that this would solve two issues: 
> providing a reference-semantics type with all the pattern matching 
> functionality of current enums, and providing a construct for modeling 
> case-class style ADTs where each case should be treated as a subtype (as has 
> been occasionally proposed).
> 
> I would like feedback as to:
> - Whether this is something that would be useful enough to justify additional 
> language features
> - Whether this is something that would be theoretically well-founded and 
> elegant
> 

This is definitely an idea worth exploring.  I am interested in hearing from 
folks who have experience with Scala case classes.  How have you found them 
useful in ways that Swift’s current enums do not address?  


> Thanks for your time, and have a great day!
> 
> Austin
> 
> 
> _______________________________________________
> 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