sig
  type ('perm, 'state) t
  val create :
    ?init:'state -> unit -> ([< 'Core.Std.perms ], 'state) Update_queue.t
  val init : (Core.Std.read_write, 'state) Update_queue.t -> 'state -> unit
  val enqueue :
    (Core.Std.read_write, 'state) Update_queue.t ->
    ('state -> 'state) -> unit
  val watch : ('a, 'state) Update_queue.t -> f:('state -> unit) -> unit
  val map :
    ('a, 'state1) Update_queue.t ->
    f:('state1 -> 'state2) -> (Core.Std.read, 'state2) Update_queue.t
  val read_only :
    ([> Core.Std.read ], 'state) Update_queue.t ->
    (Core.Std.read, 'state) Update_queue.t
end