On Friday, 24 August 2018 at 20:59:34 UTC, aliak wrote:
THis is true. And might be interesting to try out actually. Can
you access the types in a SumType via index?
I'm thinking because Optional behaves like a range, and I guess
I'd define a SumType!(T, None), then a rough outline may be:
struct None {}
immutable none = None();
struct(T) {
SumType(T, None) opt;
T front() {
return opt[0]; // what to do here?
}
}
Or I guess I should maybe do it like this?:
return opt.match!(
(T val) => val,
(None) => T.init,
);
I think this is probably the best way:
@property T front() {
return opt.match!(
(T val) => val,
(None) {
assert(false, "called .front on an empty range");
return T.init; // for return type inference
}
);
}
You could also do it with `tryMatch` and
`std.exception.assertNotThrown`. It makes the code a little
nicer, but involving exceptions at all seemed like unnecessary
overhead to me.