sclass Dyn_FieldWatcher { DynModule module; S field; O value; Runnable action; *(DynModule *module, S *field, Runnable *action) { value = get(module, field); //module.onChange(r check); module.onFieldChange(voidfunc(S f) { if (eq(f, field)) check(); }); } void check { O newValue = get(module, field); if (eq(value, newValue)) ret; value = newValue; dm_q(module, action); } }