variant visit not pure?

Paul Backus snarwin at gmail.com
Thu May 7 16:09:21 UTC 2020


On Thursday, 7 May 2020 at 15:36:36 UTC, Ben Jones wrote:
> On Thursday, 7 May 2020 at 14:53:10 UTC, Steven Schveighoffer 
> wrote:
>
>> As others have recommended, I suggest using TaggedAlgebraic. I 
>> recently have been using it to create an algebraic type to 
>> hold a MYSQL value, so I can migrate the mysql-native library 
>> to be @safe (mysql-native currently uses Variant for 
>> everything).
>>
>> -Steve
>
> I've been using SumType... What are the main differences 
> between it and TaggedAlgebraic?

As far as I can tell, there are two main differences:

1. TaggedAlgebraic has some convenient operator overloads that 
can assert at runtime if called improperly (i.e., when the 
contained type does not support the operation). SumType never 
asserts at runtime, and instead requires you to use `match` for 
these operations to ensure that they are only performed on the 
appropriate types.

2. TaggedAlgebraic requires you to declare a union type as a 
"base", whereas SumType takes the list of member types directly 
as template arguments.

If you want more detailed information, both have online 
documentation:

TaggedAlgebraic: 
https://vibed.org/api/taggedalgebraic.taggedalgebraic/
SumType: https://pbackus.github.io/sumtype/sumtype.html


More information about the Digitalmars-d-learn mailing list