On Thursday, 2 June 2016 at 20:11:21 UTC, Alex wrote:
On Thursday, 2 June 2016 at 16:21:03 UTC, ag0aep6g wrote:
    void f(int[] arr)
    {
        A a = arrayToA(arr);
        foreach (T; A.AllowedTypes)
        {
            if (T* p = a.peek!T) f_impl(*p);
        }
    }
You totally hit the point!
The cool thing about the Algebraic is as I expected, that it doesn't change it's type... And the hard thing is, that I'm not used to its Empty, Many, ... things yet. But the question remains how to keep this @nogc? I wonder at the line with peek... and why it is not just returning the value...

Just tried this instead of your f-function:
void f(int[] arr)
{
    A result;
    import std.meta;
    alias TL = AliasSeq!(Empty, int, Many!int);
    int caseS;
    switch (arr.length)
    {
        case 0: result = Empty.init; caseS = 0; break;
        case 1: result = arr[0]; caseS = 1;  break;
        default: result = Many!int(arr); caseS = 2;
    }
    f_impl(*result.get!(TL[caseS]));
}
But got: Error: variable caseS cannot be read at compile time
which is obviously true...

Reply via email to