import std.variant : Algebraic;
import std.stdio : writeln, stdout;
int main() {
auto v = Algebraic!(int,string)(2);
stdout.writeln(v);
int a = *v.peek!(int);
stdout.writeln(a);
//stdout.writeln(v.peek!(string)); // is null
string s = *v.peek!(string); // works but bad idea
//stdout.writeln(s); // crash
// compilation error: long b = *v.peek!(long);
v = "hello";
return 0;
}
What Algebraic does is implement a very specific sum type, the easiest one, as a class.
I don't know what that kind of overcomplication is supposed to bring but fine, it works.
Currently, Algebraic does not allow recursive data types.
Allegedly, future additions to Algebraic will allow compile-time checking that all possible types are handled by the program.