sig
  exception Bug of string
  exception Finally of exn * exn
  type read = Perms.Read.t
  type write = Perms.Write.t
  type immutable = Perms.Immutable.t
  type read_write = Perms.Read_write.t
  type 'a perms = 'Perms.Upper_bound.t
  val read_of_sexp : Sexplib.Sexp.t -> read
  val sexp_of_read : read -> Sexplib.Sexp.t
  val compare_read : read -> read -> int
  val bin_read : read Bin_prot.Type_class.t
  val bin_read_read : read Bin_prot.Read.reader
  val __bin_read_read__ : (int -> read) Bin_prot.Read.reader
  val bin_reader_read : read Bin_prot.Type_class.reader
  val bin_size_read : read Bin_prot.Size.sizer
  val bin_write_read : read Bin_prot.Write.writer
  val bin_writer_read : read Bin_prot.Type_class.writer
  val write_of_sexp : Sexplib.Sexp.t -> write
  val sexp_of_write : write -> Sexplib.Sexp.t
  val compare_write : write -> write -> int
  val immutable_of_sexp : Sexplib.Sexp.t -> immutable
  val sexp_of_immutable : immutable -> Sexplib.Sexp.t
  val compare_immutable : immutable -> immutable -> int
  val bin_immutable : immutable Bin_prot.Type_class.t
  val bin_read_immutable : immutable Bin_prot.Read.reader
  val __bin_read_immutable__ : (int -> immutable) Bin_prot.Read.reader
  val bin_reader_immutable : immutable Bin_prot.Type_class.reader
  val bin_size_immutable : immutable Bin_prot.Size.sizer
  val bin_write_immutable : immutable Bin_prot.Write.writer
  val bin_writer_immutable : immutable Bin_prot.Type_class.writer
  val read_write_of_sexp : Sexplib.Sexp.t -> read_write
  val sexp_of_read_write : read_write -> Sexplib.Sexp.t
  val compare_read_write : read_write -> read_write -> int
  val bin_read_write : read_write Bin_prot.Type_class.t
  val bin_read_read_write : read_write Bin_prot.Read.reader
  val __bin_read_read_write__ : (int -> read_write) Bin_prot.Read.reader
  val bin_reader_read_write : read_write Bin_prot.Type_class.reader
  val bin_size_read_write : read_write Bin_prot.Size.sizer
  val bin_write_read_write : read_write Bin_prot.Write.writer
  val bin_writer_read_write : read_write Bin_prot.Type_class.writer
  val perms_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a perms
  val sexp_of_perms : ('-> Sexplib.Sexp.t) -> 'a perms -> Sexplib.Sexp.t
  val compare_perms : ('-> '-> int) -> 'a perms -> 'a perms -> int
  val bin_perms : 'Bin_prot.Type_class.t -> 'a perms Bin_prot.Type_class.t
  val bin_read_perms :
    'Bin_prot.Read.reader -> 'a perms Bin_prot.Read.reader
  val __bin_read_perms__ :
    'Bin_prot.Read.reader -> (int -> 'a perms) Bin_prot.Read.reader
  val bin_reader_perms :
    'Bin_prot.Type_class.reader -> 'a perms Bin_prot.Type_class.reader
  val bin_size_perms : 'Bin_prot.Size.sizer -> 'a perms Bin_prot.Size.sizer
  val bin_write_perms :
    'Bin_prot.Write.writer -> 'a perms Bin_prot.Write.writer
  val bin_writer_perms :
    'Bin_prot.Type_class.writer -> 'a perms Bin_prot.Type_class.writer
  type never_returns = Never_returns.never_returns
  val never_returns : Common.never_returns -> 'a
  val protect : f:(unit -> 'a) -> finally:(unit -> unit) -> 'a
  val protectx : f:('-> 'a) -> '-> finally:('-> unit) -> 'a
  val fst3 : 'a * 'b * '-> 'a
  val snd3 : 'b * 'a * '-> 'a
  val trd3 : 'b * 'c * '-> 'a
  val uw : 'a option -> 'a
  val is_none : 'a option -> bool
  val is_some : 'a option -> bool
  val ( |! ) : '-> ('-> 'b) -> 'b
  val ( |> ) : '-> ('-> 'b) -> 'b
  val ident : '-> 'a
  val const : '-> '-> 'a
  val ( ==> ) : bool -> bool -> bool
  val failwiths :
    ?strict:unit ->
    ?here:Lexing.position -> string -> '-> ('-> Sexplib.Sexp.t) -> 'b
  val failwithp :
    ?strict:unit ->
    Lexing.position -> string -> '-> ('-> Sexplib.Sexp.t) -> 'b
  val failwithf : ('r, unit, string, unit -> 'a) Pervasives.format4 -> 'r
  val invalid_argf : ('r, unit, string, unit -> 'a) Pervasives.format4 -> 'r
  val ok_exn : 'Or_error.t -> 'a
  val error :
    ?strict:unit -> string -> '-> ('-> Sexplib.Sexp.t) -> 'Or_error.t
  type -'a return =
    'With_return.return = private {
    return : 'b. '-> 'b;
  }
  val with_return : ('Common.return -> 'a) -> 'a
  val with_return_option : ('Common.return -> unit) -> 'a option
  val phys_equal : '-> '-> bool
  val ( == ) :
    [ `Consider_using_phys_equal ] ->
    [ `Consider_using_phys_equal ] -> [ `Consider_using_phys_equal ]
  val ( != ) :
    [ `Consider_using_phys_equal ] ->
    [ `Consider_using_phys_equal ] -> [ `Consider_using_phys_equal ]
  val phys_same : '-> '-> bool
  val force : 'Lazy.t -> 'a
  val stage : '-> 'Staged.t
  val unstage : 'Staged.t -> 'a
  exception C_malloc_exn of int * int
  val seek_out :
    [ `Deprecated_use_out_channel ] ->
    [ `Deprecated_use_out_channel ] -> [ `Deprecated_use_out_channel ]
  val pos_out :
    [ `Deprecated_use_out_channel ] -> [ `Deprecated_use_out_channel ]
  val out_channel_length :
    [ `Deprecated_use_out_channel ] -> [ `Deprecated_use_out_channel ]
  val seek_in :
    [ `Deprecated_use_in_channel ] ->
    [ `Deprecated_use_in_channel ] -> [ `Deprecated_use_in_channel ]
  val pos_in :
    [ `Deprecated_use_in_channel ] -> [ `Deprecated_use_in_channel ]
  val in_channel_length :
    [ `Deprecated_use_in_channel ] -> [ `Deprecated_use_in_channel ]
  val modf : [ `Deprecated_use_float_modf ] -> [ `Deprecated_use_float_modf ]
  val truncate :
    [ `Deprecated_use_float_iround_towards_zero ] ->
    [ `Deprecated_use_float_iround_towards_zero ]
  val close_in :
    [ `Deprecated_use_in_channel ] -> [ `Deprecated_use_in_channel ]
  val close_out :
    [ `Deprecated_use_out_channel ] -> [ `Deprecated_use_out_channel ]
  val ( & ) :
    [ `Deprecated_use_two_ampersands ] ->
    [ `Deprecated_use_two_ampersands ] -> [ `Deprecated_use_two_ampersands ]
  val ( or ) : [ `Deprecated_use_pipe_pipe ]
  val max_int : [ `Deprecated_use_int_module ]
  val min_int : [ `Deprecated_use_int_module ]
  val ceil :
    [ `Deprecated_use__Float__round_up ] ->
    [ `Deprecated_use__Float__round_up ]
  val floor :
    [ `Deprecated_use__Float__round_down ] ->
    [ `Deprecated_use__Float__round_down ]
  val abs_float :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val mod_float :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val frexp :
    [ `Deprecated_use_float_module ] ->
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val ldexp :
    [ `Deprecated_use_float_module ] ->
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val float_of_int :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val max_float : [ `Deprecated_use_float_module ]
  val min_float : [ `Deprecated_use_float_module ]
  val epsilon_float : [ `Deprecated_use_float_module ]
  val classify_float :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val string_of_float :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val float_of_string :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  val infinity : [ `Deprecated_use_float_module ]
  val neg_infinity : [ `Deprecated_use_float_module ]
  val nan : [ `Deprecated_use_float_module ]
  val int_of_float :
    [ `Deprecated_use_float_module ] -> [ `Deprecated_use_float_module ]
  type fpclass = [ `Deprecated_use_float_module ]
  val sexp_of_never_returns : Common.never_returns -> Sexplib.Sexp.t
end