sig
  type 'a t = 'a ref
  external ref : '-> 'a ref = "%makemutable"
  external ( ! ) : 'a ref -> 'a = "%field0"
  external ( := ) : 'a ref -> '-> unit = "%setfield0"
  external set : 'a ref -> '-> unit = "%setfield0"
  external get : 'a ref -> 'a = "%field0"
  val copy : 'a ref -> 'a ref
  val pre : 'a ref -> ('-> 'a) -> 'a
  val post : 'a ref -> ('-> 'a) -> 'a
  val swap : 'a ref -> 'a ref -> unit
  val post_incr : int ref -> int
  val post_decr : int ref -> int
  val pre_incr : int ref -> int
  val pre_decr : int ref -> int
  val protect : 'a ref -> '-> (unit -> 'b) -> 'b
  val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
  val print :
    (Extlib.InnerIO.input -> '-> unit) ->
    Extlib.InnerIO.input -> 'a t -> unit
end