sig
  exception Already_set
  type 'a t = 'Set_once.t
  val create : unit -> 'a t
  val set : 'a t -> '-> (unit, string) Result.t
  val set_exn : 'a t -> '-> unit
  val get : 'a t -> 'a option
  val get_exn : 'a t -> 'a
  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 ounit_tests : unit -> OUnit.test
end