sig
  module type S = Pool_intf.S
  module Slots : Tuple_type.Slots
  module Slot : Tuple_type.Slot
  module Pointer :
    sig
      type 'a t = private int
      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
  module Unsafe :
    sig
      module Slots : Tuple_type.Slots
      module Slot : Tuple_type.Slot
      module Pointer :
        sig
          type 'a t = private int
          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 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 create : ('a, 'b) Slots.t -> capacity:int -> ('a, 'b) Slots.t t
    end
  module Debug :
    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 ref
        val show_messages : bool ref
      end
  module Error_check : functor (Pool : S-> S
end