sclass OKOrError implements IF0 {
A value;
gettable Throwable error;
*() {}
*(A *value) {}
*(bool dummy, Throwable *error) {}
bool ok aka isOK() { ret error == null; }
toString {
ret ok()
? /*"OK: " +*/ str(value)
: "Error: " + str(error);
}
public A get() { ret !ok() ? null : value; }
public A getMandatory() { if (!ok()) throw rethrow(error); ret value; }
}