sig
  type t
  type raw_data = nativeint
  external repr : '-> Obj.t = "%identity"
  external obj : Obj.t -> 'a = "%identity"
  external magic : '-> 'b = "%identity"
  val is_block : Obj.t -> bool
  external is_int : Obj.t -> bool = "%obj_is_int"
  external tag : Obj.t -> int = "caml_obj_tag" [@@noalloc]
  external size : Obj.t -> int = "%obj_size"
  external reachable_words : Obj.t -> int = "caml_obj_reachable_words"
  external field : Obj.t -> int -> Obj.t = "%obj_field"
  external set_field : Obj.t -> int -> Obj.t -> unit = "%obj_set_field"
  external compare_and_swap_field : Obj.t -> int -> Obj.t -> Obj.t -> bool
    = "caml_obj_compare_and_swap"
  external is_shared : Obj.t -> bool = "caml_obj_is_shared"
  val double_field : Obj.t -> int -> float
  val set_double_field : Obj.t -> int -> float -> unit
  external raw_field : Obj.t -> int -> Obj.raw_data = "caml_obj_raw_field"
  external set_raw_field : Obj.t -> int -> Obj.raw_data -> unit
    = "caml_obj_set_raw_field"
  external new_block : int -> int -> Obj.t = "caml_obj_block"
  external dup : Obj.t -> Obj.t = "caml_obj_dup"
  external add_offset : Obj.t -> Stdlib.Int32.t -> Obj.t
    = "caml_obj_add_offset"
  external with_tag : int -> Obj.t -> Obj.t = "caml_obj_with_tag"
  val first_non_constant_constructor_tag : int
  val last_non_constant_constructor_tag : int
  val forcing_tag : int
  val cont_tag : int
  val lazy_tag : int
  val closure_tag : int
  val object_tag : int
  val infix_tag : int
  val forward_tag : int
  val no_scan_tag : int
  val abstract_tag : int
  val string_tag : int
  val double_tag : int
  val double_array_tag : int
  val custom_tag : int
  val int_tag : int
  val out_of_heap_tag : int
  val unaligned_tag : int
  module Closure :
    sig
      type info = { arity : int; start_env : int; }
      val info : Obj.t -> Obj.Closure.info
    end
  module Extension_constructor :
    sig
      type t = extension_constructor
      val of_val : '-> Obj.Extension_constructor.t
      val name : Obj.Extension_constructor.t -> string
      val id : Obj.Extension_constructor.t -> int
    end
  module Ephemeron :
    sig
      type obj_t = Obj.t
      type t
      val create : int -> Obj.Ephemeron.t
      val length : Obj.Ephemeron.t -> int
      val get_key : Obj.Ephemeron.t -> int -> Obj.Ephemeron.obj_t option
      val get_key_copy : Obj.Ephemeron.t -> int -> Obj.Ephemeron.obj_t option
      val set_key : Obj.Ephemeron.t -> int -> Obj.Ephemeron.obj_t -> unit
      val unset_key : Obj.Ephemeron.t -> int -> unit
      val check_key : Obj.Ephemeron.t -> int -> bool
      val blit_key :
        Obj.Ephemeron.t -> int -> Obj.Ephemeron.t -> int -> int -> unit
      val get_data : Obj.Ephemeron.t -> Obj.Ephemeron.obj_t option
      val get_data_copy : Obj.Ephemeron.t -> Obj.Ephemeron.obj_t option
      val set_data : Obj.Ephemeron.t -> Obj.Ephemeron.obj_t -> unit
      val unset_data : Obj.Ephemeron.t -> unit
      val check_data : Obj.Ephemeron.t -> bool
      val blit_data : Obj.Ephemeron.t -> Obj.Ephemeron.t -> unit
      val max_ephe_length : int
    end
end