static A evalInQ(Q q, final 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)); }