sclass SimpleLiveValue extends LiveValue {
Class type;
volatile A value;
transient L onChange = synchroList();
*(Class *type) {}
*(Class *type, A *value) {}
public Class getType() { ret type; }
public A get() { ret value; }
public void onChange(Runnable l) { onChange.add(l); }
public void removeOnChangeListener(Runnable l) { onChange.remove(l); }
void fireChanged() {
pcallFAll(onChange);
}
void set(A a) { if (neq(value, a)) { value = a; fireChanged(); } }
}