`on_update_exn t ~f` calls `f` after the current stabilization and after each subsequent stabilization in which `t` changes, until `disallow_future_use t` is called. `f` will be called at most once per stabilization. Here is a state diagram for the allowable sequences of `Update.t`'s that can be supplied to a particular `f`:

               /-----------------------------------------------------\
               |                 /                                   |
               |                 |                                   v
              Start ------> Initialized ------> Changed ------> Invalidated
                                                  ^  |
                                                  \--/

`on_update_exn` raises if `disallow_future_use t` was previously called.

`type 'a t````=`

`|` `Initialized of 'a`
`|` `Changed of 'a * 'a` | (** `Changed (old_value, new_value)` *)
`|` `Invalidated`

``
`include sig ... end`
`val compare : ('a ‑> 'a ‑> int) ‑> 'a t ‑> 'a t ‑> int`
`val sexp_of_t : ('a ‑> Base.Sexp.t) ‑> 'a t ‑> Base.Sexp.t`