static Runnable rWatcher(IF0 calc, Runnable r) { ret new Runnable { A value; run { A newValue = callF(calc); if (neq(value, newValue)) { value = newValue; callF(r); } } }; }