sig
type 'a t = 'a ref
external ref : 'a -> 'a ref = "%makemutable"
external ( ! ) : 'a ref -> 'a = "%field0"
external ( := ) : 'a ref -> 'a -> unit = "%setfield0"
external set : 'a ref -> 'a -> unit = "%setfield0"
external get : 'a ref -> 'a = "%field0"
val copy : 'a ref -> 'a ref
val pre : 'a ref -> ('a -> 'a) -> 'a
val post : 'a ref -> ('a -> '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 -> 'a -> (unit -> 'b) -> 'b
val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
val print :
(Extlib.InnerIO.input -> 'a -> unit) ->
Extlib.InnerIO.input -> 'a t -> unit
end