sclass OrError extends Var {
O error; // usually a Throwable
*() {}
*(A value) { super(value); }
*(bool dummy, O *error) { assertNotNull(error); }
bool ok() { ret error == null; }
O error() { ret error; }
static OrError ok(B a) { ret new OrError(a); }
static OrError error(O error) { ret new OrError(true, error); }
toString {
ret ok()
? super.toString()
: str(error);
}
}