sclass WatchVariable extends Var { IF0 f; ReliableSingleThread rst = new(r update_impl); event change; *(IF0 *f) { update(); } // only run in rst void update_impl() { A value = f?!; if (!eq(value, get())) { set(value); change(); } } void update() { rst!; } }