www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10490] New: Type enum in std.variant.Algebraic for final switches

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10490

           Summary: Type enum in std.variant.Algebraic for final switches
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc



This enhancement request is just an idea. Maybe better ideas can be found.

Given the definition of an Algebraic like this:

import std.variant;
struct Foo {}
void main() {
    alias T = Algebraic!(int, Foo);
}



I think it can be a good idea to generate automatically inside T an enum and a
method like this:

enum Type { int_, Foo; }

 property Type theType() const { return ...; }

(Built-in types are keywords so they get a leading underscore.)


So an Algebraic can be used in a final switch:

import std.variant;
struct Foo {}
void main() {
    alias T = Algebraic!(int, Foo);
    auto t = T(5);
    final switch (t.theType) {
        case T.Type.int_:
            auto p = t.peek!int;
            break;
        case T.Type.Foo:
            auto p = t.peek!Foo;
            break;
    }
}


(Currently T.type is a TypeInfo, that can't be used in a final switch.)

This allows a poor man's safe pattern matching on an Algebraic.

An implementation of Issue 596 will allow to use a bit better pattern matching
on an Algebraic.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 27 2013
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10490


Diggory <diggsey googlemail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |diggsey googlemail.com



This is related to Issue 10127

Personally I like that syntax where you use the actual type name rather than
putting an underscore in front - it means you can easily use any type, not just
ones that can be named.

Algebraic could then have an alias to a particular instantiation of that
TypeEnum template inside it rather than generating its own.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 27 2013