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