static A evalInQ(Q q, IF0 f) {
ret evalInQ(q, if0ToF0(f));
}
static A evalInQ(Q q, F0 f) {
if (isInQ(q)) ret callF(f);
final new Var> var;
q.add(r {
try {
var.set(eitherA(callF(f)));
} catch e {
var.set(eitherB(e));
}
});
ret returnOrThrow_either(waitForVarToBeNotNull(var));
}