// Note: these first 3 syntaxes seem to be wrong // (not failing on timeout) static O evalWithTimeoutOrException(fO f, int timeoutMS) { ret evalWithTimeoutOrException(timeoutMS, f); } static O evalWithTimeoutOrException(int timeoutMS, fO f) { ret eitherAOpt(evalWithTimeout(timeoutMS, f)); } static O evalWithTimeoutOrException(double timeoutSeconds, fO f) { ret eitherAOpt(evalWithTimeout(timeoutSeconds, f)); } // these syntaxes are ok static A evalWithTimeoutOrException(int timeoutMS, F0 f) { Either e = evalWithTimeout(timeoutMS, f); if (e.isA()) ret (A) e.a(); fail("Timeout after " + timeoutMS + " ms"); } static A evalWithTimeoutOrException(double timeoutSeconds, F0 f) { ret evalWithTimeoutOrException(toMS_int(timeoutSeconds), f); }