mir.algebraic additions:
some
,none
, andsuit
second level algebraic visitor handlers@reflectErr
UDAErr
auto expanded wrapper when@reflectErr
can't be used- Required utility API
import mir.algebraic;
import mir.conv: to;
alias orElse(alias fun) = visit!(some!"a", none!fun);
alias convertErrToString = orElse!(to!string);
// can be any other type including integer enums
@reflectErr
static struct ErrorInfo {
string msg;
auto toString() const { return msg; }
}
alias V = Variant!(Err!string, ErrorInfo, long, double);
alias R = typeof(convertErrToString(V.init));
static assert(is(R == Variant!(string, long, double)), R.stringof);
assert(convertErrToString(V(1)) == 1);
assert(convertErrToString(V(1.0)) == 1.0);
assert(convertErrToString(ErrorInfo("b")) == "b");
assert(convertErrToString("Ш".err) == "Ш");