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
      val sexp_of_t :
        ('slots -> Sexplib.Sexp.t) ->
        'slots Pool_intf.S.Pointer.t -> Sexplib.Sexp.t
    end
  type 'slots t
  val invariant : 'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.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 -> int
  val pointer_of_id :
    'slots Pool_intf.S.t ->
    int -> 'slots Pool_intf.S.Pointer.t Core.Std.Or_error.t
  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