On Tuesday, 29 November 2022 at 14:45:09 UTC, Timon Gehr wrote:
>On 11/29/22 07:26, Walter Bright wrote:
>Go ahead, Make My Day! Destroy!
https://github.com/WalterBright/DIPs/blob/sumtypes/DIPs/1NNN-(wgb).md
Some things that are missing:
- non-default construction, e.g.:
sumtype Result{
error,
int value;
}
auto result1 = Result.error;
auto result2 = Result.value(2);
The above is a bit unergonomic, maybe there is a better way to expose those constructors. They should exist though, otherwise it is e.g., impossible to initialize an immutable sumtype.
[snip]
I was a little confused because the DIP proposal has the same example (though using Error
instead of error
) and it didn't have an identifier with it. According to the syntax, a field declaration has to have an identifier with the type. So the only other option is Error
/error
is an enum. If that's the case, it's a little confusing because Error
is a commonly used class already.
Am I right that if you wanted to do the same as below
import std.sumtype;
struct Fahrenheit { double degrees; }
struct Celsius { double degrees; }
struct Kelvin { double degrees; }
alias Temperature = SumType!(Fahrenheit, Celsius, Kelvin);
then the equivalent with this DIP would be
sumtype Temperature
{
Fahrenheit fahrenheit,
Celsius celsius,
Kelvin kelvin
}