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