// f : func -> A // onChange: voidfunc(A) or Runnable static java.util.Timer onValueChange(int interval, fO f, fO onChange) { ret doEvery(interval, new Runnable { O lastValue = pcallF(f); public void run { O value = pcallF(f); if (neq(value, lastValue)) { lastValue = value; callF(onChange, value); } } }); }