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