# add-watch
Register a watcher fn on a ref cell under key. The fn is invoked with
`(key cell old new)` on every `swap!`/`reset!` (never on `def`).
## Syntax
[add-watch $a $key $fn]
## Parameters
- `$a` — A ref cell (anonymous ref or `[var x]` binding cell).
- `$key` — Any hashable value used to identify the watcher.
- `$fn` — Watcher callback, called as `($fn $key $a $old $new)`.
## Examples
def a [ref 0] [add-watch $a :log {|k cell old new| echo "change:" $old "->" $new}] [reset! $a 5] # prints: change: 0 -> 5 def ready false [add-watch [var ready] :log {|k cell old new| echo "ready:" $old "->" $new}] [reset! [var ready] true] # prints: ready: false -> true
## Returns
`nil`.
## See Also
`remove-watch`, `swap!`, `reset!`, `ref`