sig
  type 'a t
  val create : 'a -> 'a Bogue.Var.t
  val get : 'a Bogue.Var.t -> 'a
  val set : 'a Bogue.Var.t -> 'a -> unit
  val with_protect : 'a Bogue.Var.t -> ('a -> 'b) -> 'b
  val protect_fn : 'a Bogue.Var.t -> ('a -> 'b) -> 'b
end