// Note: uses object identity for change events sclass VarWithNotify extends Var { event fireChange(); public void set(A a) { bool changed; synchronized { if (changed = v != a) v = a; } if (changed) fireChange(); } }