// returns last value sclass PrintPolledValueUntilPredicateOrTimeout { settable IF0 makeValue; settable IPred shouldEnd; settable double timeout = 60.0; settable int interval = 100; settable S printPrefix = ""; void printValue(A a) { print(printPrefix, a); } run { Timeout timeOut = new(timeout); A a = makeValue!; printValue(a); if (pred != null && pred.get(a)) break; while (!timeOut!) { A b = makeValue!; if (!eq(a, b)) printValue(a = b); if (pred != null && pred.get(a)) break; else sleep(interval); } ret a; } }