xxxxxxxxxx
/+dub.sdl:
dependency "sumtype" version="~>0.9.5"
+/
import std.stdio;
import sumtype;
struct Payload(T...){
alias Types = T;
T contents;
}
struct ParseError{
string s;
}
template ParseResult(P, PE){
static if(is(P : Payload!Args, Args...) && is(PE == ParseError)){
alias ParseResult = SumType!(P, PE);
}
}
bool isParseError(PR: ParseResult!(P, PE), P, PE)(PR pr){
return pr.match!(
(P p) => false,
(PE pe) => true);
}
bool isParseError2(PR: SumType!(P, PE), P, PE)(PR pr){
return pr.match!(
(P p)=> false,
(PE pe) => true);
}
void main(){
auto pi = Payload!int(5);
auto pe = ParseError("error");
alias PRType = ParseResult!(Payload!int, ParseError);
auto pr = PRType(pi);
writeln(pr.isParseError2);
writeln(pr.isParseError);
}