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