sig
  exception Already_set
  type 'a t
  val create : unit -> 'Set_once.t
  val set : 'Set_once.t -> '-> (unit, string) Result.t
  val set_exn : 'Set_once.t -> '-> unit
  val get : 'Set_once.t -> 'a option
  val get_exn : 'Set_once.t -> 'a
  val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Set_once.t
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'Set_once.t -> Sexplib.Sexp.t
  val bin_t : 'Bin_prot.Type_class.t -> 'Set_once.t Bin_prot.Type_class.t
  val bin_read_t :
    'Bin_prot.Read.reader -> 'Set_once.t Bin_prot.Read.reader
  val __bin_read_t__ :
    'Bin_prot.Read.reader -> (int -> 'Set_once.t) Bin_prot.Read.reader
  val bin_reader_t :
    'Bin_prot.Type_class.reader -> 'Set_once.t Bin_prot.Type_class.reader
  val bin_size_t :
    'Bin_prot.Size.sizer -> 'Set_once.t Bin_prot.Size.sizer
  val bin_write_t :
    'Bin_prot.Write.writer -> 'Set_once.t Bin_prot.Write.writer
  val bin_writer_t :
    'Bin_prot.Type_class.writer -> 'Set_once.t Bin_prot.Type_class.writer
end