[swift-evolution] [Idea] Creating an enums as a sum of multiple other enums
Xiaodi Wu
xiaodi.wu at gmail.com
Mon Jul 31 20:35:36 CDT 2017
I think what you're asking for here is essentially some sort of (or special
case of) value subtyping, a topic near and dear to many.
On Mon, Jul 31, 2017 at 7:43 PM, Ahmad Alhashemi via swift-evolution <
swift-evolution at swift.org> wrote:
> I’ve been writing an interpreter in Swift and have been finding enums
> incredibly useful. One feature thought that I thought would make life
> easier is the ability to create a super-enum that contains as its cases all
> the cases of its constituent enums:
>
> > enum UnaryOperator {
> > case not
> > }
> >
> > enum BinaryOperator {
> > case and
> > case or
> > }
> >
> > case BooleanLiteral {
> > case `true`
> > case `false`
> > }
> >
> > typealias Token = UnaryOperator | BinaryOperator | BooleanLiteral
>
> It would then be possible to do something like this:
>
> > scanToken() -> Token
> >
> > indirect enum Expr {
> > case binary(op: BinaryOperator, lhs: Expr, rhs: Expr)
> > }
>
> For example, a number of functions in the recursive descent parser can
> only return a subset of all possible expressions.
>
> Of course it’s already possible to represent the same data structure like
> this:
>
> > enum Token {
> > case binaryOperator(BinaryOperator)
> > case unaryOperator(UnaryOperator)
> > case booleanLiteral(BooleanLiteral)
> > }
>
> Perhaps what I’m suggesting could just be syntactic sugar, but it’d make
> it much easier to switch over `Token` without worrying about all of the
> nested enums. The feature becomes even more useful if you think about a
> deeper hierarchy of enums. It would bring some of the power of
> protocols/POP to enums.
>
> This raises a few questions such as:
> - Case name collisions
> - Associated types
> - Raw values
>
> But I can’t think of anything that cannot be addressed with sensible rules
> and conditions.
>
> Interested to read your thoughts.
>
> -Ahmad
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170731/fcc83f46/attachment.html>
More information about the swift-evolution
mailing list