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; } }