sig
  type 'a ref
  val ref : 'a -> 'a STM.ref
  exception Retry
  exception Abort
  exception Cancelled
  val run :
    ?retries:int ->
    (('a STM.ref -> 'a) -> ('a STM.ref -> 'a -> unit) -> 'b) -> 'b
  val run_read_only : ?retries:int -> (('a STM.ref -> 'a) -> 'b) -> 'b
end