Truly algebraic Variant and Nullable

9il ilyayaroshenko at gmail.com
Thu Dec 17 15:15:20 UTC 2020


On Wednesday, 16 December 2020 at 18:14:54 UTC, Oleg B wrote:
> 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:
>>>> [...]
>>>
>>> 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?

Get by Kind cand be added.

You can define TaggedAlgebraic [1].

It has a bit weird API with a separate array of lengths. But we 
can add another one definition option I think.

http://mir-core.libmir.org/mir_algebraic.html#TaggedVariant


More information about the Digitalmars-d-announce mailing list