Truly algebraic Variant and Nullable

Oleg B code.viator at gmail.com
Wed Dec 16 18:14:54 UTC 2020


On Wednesday, 16 December 2020 at 15:58:21 UTC, 9il wrote:
> On Wednesday, 16 December 2020 at 14:54:26 UTC, Oleg B wrote:
>> On Sunday, 15 November 2020 at 04:54:19 UTC, 9il wrote:
>>> Truly algebraic Variant and Nullable with an 
>>> order-independent list of types.
>>>
>>> Nullable is defined as
>>> ```
>>> alias Nullable(T...) = Variant!(typeof(null), T);
>>> ```
>>>
>>> Variant and Nullable with zero types are allowed.
>>>
>>> `void` type is supported.
>>>
>>> Visitors are allowed to return different types.
>>>
>>> Cyclic referencing between different variant types are 
>>> supported.
>>>
>>> More features and API:
>>>
>>> http://mir-core.libmir.org/mir_algebraic.html
>>>
>>> Cheers,
>>> Ilya
>>>
>>> The work has been sponsored by Kaleidic Associates and 
>>> Symmetry Investments.
>>
>> Great library! Have you any plan to separate it from mir-core 
>> (to mir-algebraic for example)?
>
> Thanks! Maybe, but mir-core is quite small itself and 
> mir.algebraic is the only part that would be extended or 
> updated in the near future. Other parts are quite stable. If 
> there would be a strong reason to split it, we can do it.

That are you planing update? It's will be perfect if you add 
`get` overload for kind type and more work with tags [2]

like that:
```
alias TUnion = Algebraic!(
     TaggedType!(int, "count"),
     TaggedType!(string, "str")
);

auto v = TUnion("hello");

S: final switch (v.kind)
{
   static foreach (i, k; EnumMembers!(k.Kind))
     case k:
       someFunction(v.get!k); // [1] by now 
v.get!(TUnion.AllowedTypes[i])
       break S;
}

if (v.is_count) // [2]
     writeln(v.count);
```

or may be I miss this feature in docs?



More information about the Digitalmars-d-announce mailing list