sig
  module Slots : Tuple_type.Slots
  module Slot : Tuple_type.Slot
  module Pointer :
    sig
      type 'slots t
      val null : unit -> 'Pool_intf.S.Pointer.t
      val is_null : 'Pool_intf.S.Pointer.t -> bool
      val phys_equal :
        'Pool_intf.S.Pointer.t -> 'Pool_intf.S.Pointer.t -> bool
      module Id :
        sig
          type t
          val t_of_sexp : Sexplib.Sexp.t -> Pool_intf.S.Pointer.Id.t
          val sexp_of_t : Pool_intf.S.Pointer.Id.t -> Sexplib.Sexp.t
          val bin_t : Pool_intf.S.Pointer.Id.t Bin_prot.Type_class.t
          val bin_read_t : Pool_intf.S.Pointer.Id.t Bin_prot.Read_ml.reader
          val bin_read_t_ :
            Pool_intf.S.Pointer.Id.t Bin_prot.Unsafe_read_c.reader
          val bin_read_t__ :
            (int -> Pool_intf.S.Pointer.Id.t) Bin_prot.Unsafe_read_c.reader
          val bin_reader_t :
            Pool_intf.S.Pointer.Id.t Bin_prot.Type_class.reader
          val bin_size_t : Pool_intf.S.Pointer.Id.t Bin_prot.Size.sizer
          val bin_write_t : Pool_intf.S.Pointer.Id.t Bin_prot.Write_ml.writer
          val bin_write_t_ :
            Pool_intf.S.Pointer.Id.t Bin_prot.Unsafe_write_c.writer
          val bin_writer_t :
            Pool_intf.S.Pointer.Id.t Bin_prot.Type_class.writer
        end
      val sexp_of_t :
        ('slots -> Sexplib.Sexp.t) ->
        'slots Pool_intf.S.Pointer.t -> Sexplib.Sexp.t
    end
  type 'slots t
  val invariant : 'Invariant_intf.inv -> 'a t Invariant_intf.inv
  val pointer_is_valid :
    'slots Pool_intf.S.t -> 'slots Pool_intf.S.Pointer.t -> bool
  val id_of_pointer :
    'slots Pool_intf.S.t ->
    'slots Pool_intf.S.Pointer.t -> Pool_intf.S.Pointer.Id.t
  val pointer_of_id_exn :
    'slots Pool_intf.S.t ->
    Pool_intf.S.Pointer.Id.t -> 'slots Pool_intf.S.Pointer.t
  val pointer_of_id_exn_is_supported : bool
  val create :
    ('tuple, 'a) Slots.t ->
    capacity:int -> dummy:'tuple -> ('tuple, 'a) Slots.t Pool_intf.S.t
  val capacity : 'Pool_intf.S.t -> int
  val length : 'Pool_intf.S.t -> int
  val grow : ?capacity:int -> 'Pool_intf.S.t -> 'Pool_intf.S.t
  val is_full : 'Pool_intf.S.t -> bool
  val free : 'slots Pool_intf.S.t -> 'slots Pool_intf.S.Pointer.t -> unit
  val new1 :
    'a0 Slots.t1 Pool_intf.S.t -> 'a0 -> 'a0 Slots.t1 Pool_intf.S.Pointer.t
  val new2 :
    ('a0, 'a1) Slots.t2 Pool_intf.S.t ->
    'a0 -> 'a1 -> ('a0, 'a1) Slots.t2 Pool_intf.S.Pointer.t
  val new3 :
    ('a0, 'a1, 'a2) Slots.t3 Pool_intf.S.t ->
    'a0 -> 'a1 -> 'a2 -> ('a0, 'a1, 'a2) Slots.t3 Pool_intf.S.Pointer.t
  val new4 :
    ('a0, 'a1, 'a2, 'a3) Slots.t4 Pool_intf.S.t ->
    'a0 ->
    'a1 -> 'a2 -> 'a3 -> ('a0, 'a1, 'a2, 'a3) Slots.t4 Pool_intf.S.Pointer.t
  val new5 :
    ('a0, 'a1, 'a2, 'a3, 'a4) Slots.t5 Pool_intf.S.t ->
    'a0 ->
    'a1 ->
    'a2 ->
    'a3 -> 'a4 -> ('a0, 'a1, 'a2, 'a3, 'a4) Slots.t5 Pool_intf.S.Pointer.t
  val new6 :
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) Slots.t6 Pool_intf.S.t ->
    'a0 ->
    'a1 ->
    'a2 ->
    'a3 ->
    'a4 ->
    'a5 -> ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) Slots.t6 Pool_intf.S.Pointer.t
  val new7 :
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) Slots.t7 Pool_intf.S.t ->
    'a0 ->
    'a1 ->
    'a2 ->
    'a3 ->
    'a4 ->
    'a5 ->
    'a6 -> ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) Slots.t7 Pool_intf.S.Pointer.t
  val new8 :
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) Slots.t8 Pool_intf.S.t ->
    'a0 ->
    'a1 ->
    'a2 ->
    'a3 ->
    'a4 ->
    'a5 ->
    'a6 ->
    'a7 ->
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) Slots.t8 Pool_intf.S.Pointer.t
  val new9 :
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) Slots.t9 Pool_intf.S.t ->
    'a0 ->
    'a1 ->
    'a2 ->
    'a3 ->
    'a4 ->
    'a5 ->
    'a6 ->
    'a7 ->
    'a8 ->
    ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) Slots.t9
    Pool_intf.S.Pointer.t
  val get_tuple :
    ('tuple, 'a) Slots.t Pool_intf.S.t ->
    ('tuple, 'a) Slots.t Pool_intf.S.Pointer.t -> 'tuple
  val get :
    ('a, 'variant) Slots.t Pool_intf.S.t ->
    ('a, 'variant) Slots.t Pool_intf.S.Pointer.t ->
    ('variant, 'slot) Slot.t -> 'slot
  val unsafe_get :
    ('a, 'variant) Slots.t Pool_intf.S.t ->
    ('a, 'variant) Slots.t Pool_intf.S.Pointer.t ->
    ('variant, 'slot) Slot.t -> 'slot
  val set :
    ('a, 'variant) Slots.t Pool_intf.S.t ->
    ('a, 'variant) Slots.t Pool_intf.S.Pointer.t ->
    ('variant, 'slot) Slot.t -> 'slot -> unit
  val unsafe_set :
    ('a, 'variant) Slots.t Pool_intf.S.t ->
    ('a, 'variant) Slots.t Pool_intf.S.Pointer.t ->
    ('variant, 'slot) Slot.t -> 'slot -> unit
  val sexp_of_t :
    ('slots -> Sexplib.Sexp.t) -> 'slots Pool_intf.S.t -> Sexplib.Sexp.t
end