watch t f will call f every time that that t's state is updated. f should not call enqueue_update.
watch t f
f
t
enqueue_update