sig
  module type S = Pool_intf.S
  module Obj_array :
    sig
      module Slots :
        sig
          type ('tuple, 'variant) u =
              ('tuple, 'variant) Pool.Obj_array.Slots.u
          type ('tuple, 'variant) t = [ `Slots of ('tuple, 'variant) u ]
          val slots_per_tuple : ('a, 'b) t -> int
          type 'a0 t1 = ('a0, [ `S0 of 'a0 ]) t
          type ('a0, 'a1) t2 = ('a0 * 'a1, [ `S0 of 'a0 | `S1 of 'a1 ]) t
          type ('a0, 'a1, 'a2) t3 =
              ('a0 * 'a1 * 'a2, [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 ]) t
          type ('a0, 'a1, 'a2, 'a3) t4 =
              ('a0 * 'a1 * 'a2 * 'a3,
               [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 | `S3 of 'a3 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4) t5 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6
               | `S7 of 'a7 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7 * 'a8,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6
               | `S7 of 'a7
               | `S8 of 'a8 ])
              t
          val t1 : 'a t1
          val t2 : ('a, 'b) t2
          val t3 : ('a, 'b, 'c) t3
          val t4 : ('a, 'b, 'c, 'd) t4
          val t5 : ('a, 'b, 'c, 'd, 'e) t5
          val t6 : ('a, 'b, 'c, 'd, 'e, 'f) t6
          val t7 : ('a, 'b, 'c, 'd, 'e, 'f, 'g) t7
          val t8 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h) t8
          val t9 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) t9
          val sexp_of_t :
            ('tuple -> Sexplib.Sexp.t) ->
            ('variant -> Sexplib.Sexp.t) ->
            ('tuple, 'variant) t -> Sexplib.Sexp.t
          val sexp_of_t1 :
            ('a0 -> Sexplib.Sexp.t) -> 'a0 t1 -> Sexplib.Sexp.t
          val sexp_of_t2 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) -> ('a0, 'a1) t2 -> Sexplib.Sexp.t
          val sexp_of_t3 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) -> ('a0, 'a1, 'a2) t3 -> Sexplib.Sexp.t
          val sexp_of_t4 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3) t4 -> Sexplib.Sexp.t
          val sexp_of_t5 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4) t5 -> Sexplib.Sexp.t
          val sexp_of_t6 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 -> Sexplib.Sexp.t
          val sexp_of_t7 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 -> Sexplib.Sexp.t
          val sexp_of_t8 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a7 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 -> Sexplib.Sexp.t
          val sexp_of_t9 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a7 -> Sexplib.Sexp.t) ->
            ('a8 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 ->
            Sexplib.Sexp.t
        end
      module Slot :
        sig
          type ('variant, 'a) t = ('variant, 'a) Pool.Obj_array.Slot.t
          val equal : ('v, 'a) t -> ('v, 'a) t -> bool
          val t0 : ([> `S0 of 'a ], 'a) t
          val t1 : ([> `S1 of 'a ], 'a) t
          val t2 : ([> `S2 of 'a ], 'a) t
          val t3 : ([> `S3 of 'a ], 'a) t
          val t4 : ([> `S4 of 'a ], 'a) t
          val t5 : ([> `S5 of 'a ], 'a) t
          val t6 : ([> `S6 of 'a ], 'a) t
          val t7 : ([> `S7 of 'a ], 'a) t
          val t8 : ([> `S8 of 'a ], 'a) t
          val sexp_of_t :
            ('variant -> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('variant, 'a) t -> Sexplib.Sexp.t
        end
      module Pointer :
        sig
          type 'a t = 'Pool.Obj_array.Pointer.t
          val null : unit -> 'a t
          val is_null : 'a t -> bool
          val phys_equal : 'a t -> 'a t -> bool
          val sexp_of_t :
            ('slots -> Sexplib.Sexp.t) -> 'slots t -> Sexplib.Sexp.t
        end
      type 'slots t = 'slots Pool.Obj_array.t
      val invariant :
        'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.inv
      val pointer_is_valid : 'slots t -> 'slots Pointer.t -> bool
      val id_of_pointer : 'slots t -> 'slots Pointer.t -> int
      val pointer_of_id :
        'slots t -> int -> 'slots Pointer.t Core.Std.Or_error.t
      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
    end
  module None :
    sig
      module Slots :
        sig
          type ('tuple, 'variant) u = ('tuple, 'variant) Pool.None.Slots.u
          type ('tuple, 'variant) t = [ `Slots of ('tuple, 'variant) u ]
          val slots_per_tuple : ('a, 'b) t -> int
          type 'a0 t1 = ('a0, [ `S0 of 'a0 ]) t
          type ('a0, 'a1) t2 = ('a0 * 'a1, [ `S0 of 'a0 | `S1 of 'a1 ]) t
          type ('a0, 'a1, 'a2) t3 =
              ('a0 * 'a1 * 'a2, [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 ]) t
          type ('a0, 'a1, 'a2, 'a3) t4 =
              ('a0 * 'a1 * 'a2 * 'a3,
               [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 | `S3 of 'a3 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4) t5 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6
               | `S7 of 'a7 ])
              t
          type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 =
              ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7 * 'a8,
               [ `S0 of 'a0
               | `S1 of 'a1
               | `S2 of 'a2
               | `S3 of 'a3
               | `S4 of 'a4
               | `S5 of 'a5
               | `S6 of 'a6
               | `S7 of 'a7
               | `S8 of 'a8 ])
              t
          val t1 : 'a t1
          val t2 : ('a, 'b) t2
          val t3 : ('a, 'b, 'c) t3
          val t4 : ('a, 'b, 'c, 'd) t4
          val t5 : ('a, 'b, 'c, 'd, 'e) t5
          val t6 : ('a, 'b, 'c, 'd, 'e, 'f) t6
          val t7 : ('a, 'b, 'c, 'd, 'e, 'f, 'g) t7
          val t8 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h) t8
          val t9 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) t9
          val sexp_of_t :
            ('tuple -> Sexplib.Sexp.t) ->
            ('variant -> Sexplib.Sexp.t) ->
            ('tuple, 'variant) t -> Sexplib.Sexp.t
          val sexp_of_t1 :
            ('a0 -> Sexplib.Sexp.t) -> 'a0 t1 -> Sexplib.Sexp.t
          val sexp_of_t2 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) -> ('a0, 'a1) t2 -> Sexplib.Sexp.t
          val sexp_of_t3 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) -> ('a0, 'a1, 'a2) t3 -> Sexplib.Sexp.t
          val sexp_of_t4 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3) t4 -> Sexplib.Sexp.t
          val sexp_of_t5 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4) t5 -> Sexplib.Sexp.t
          val sexp_of_t6 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 -> Sexplib.Sexp.t
          val sexp_of_t7 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 -> Sexplib.Sexp.t
          val sexp_of_t8 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a7 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 -> Sexplib.Sexp.t
          val sexp_of_t9 :
            ('a0 -> Sexplib.Sexp.t) ->
            ('a1 -> Sexplib.Sexp.t) ->
            ('a2 -> Sexplib.Sexp.t) ->
            ('a3 -> Sexplib.Sexp.t) ->
            ('a4 -> Sexplib.Sexp.t) ->
            ('a5 -> Sexplib.Sexp.t) ->
            ('a6 -> Sexplib.Sexp.t) ->
            ('a7 -> Sexplib.Sexp.t) ->
            ('a8 -> Sexplib.Sexp.t) ->
            ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 ->
            Sexplib.Sexp.t
        end
      module Slot :
        sig
          type ('variant, 'a) t = ('variant, 'a) Pool.None.Slot.t
          val equal : ('v, 'a) t -> ('v, 'a) t -> bool
          val t0 : ([> `S0 of 'a ], 'a) t
          val t1 : ([> `S1 of 'a ], 'a) t
          val t2 : ([> `S2 of 'a ], 'a) t
          val t3 : ([> `S3 of 'a ], 'a) t
          val t4 : ([> `S4 of 'a ], 'a) t
          val t5 : ([> `S5 of 'a ], 'a) t
          val t6 : ([> `S6 of 'a ], 'a) t
          val t7 : ([> `S7 of 'a ], 'a) t
          val t8 : ([> `S8 of 'a ], 'a) t
          val sexp_of_t :
            ('variant -> Sexplib.Sexp.t) ->
            ('-> Sexplib.Sexp.t) -> ('variant, 'a) t -> Sexplib.Sexp.t
        end
      module Pointer :
        sig
          type 'slots t = 'slots Pool.None.Pointer.t
          val null : unit -> 'a t
          val is_null : 'a t -> bool
          val phys_equal : 'a t -> 'a t -> bool
          val sexp_of_t :
            ('slots -> Sexplib.Sexp.t) -> 'slots t -> Sexplib.Sexp.t
        end
      type 'slots t = 'slots Pool.None.t
      val invariant :
        'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.inv
      val pointer_is_valid : 'slots t -> 'slots Pointer.t -> bool
      val id_of_pointer : 'slots t -> 'slots Pointer.t -> int
      val pointer_of_id :
        'slots t -> int -> 'slots Pointer.t Core.Std.Or_error.t
      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
    end
  module Debug :
    functor (Pool : S->
      sig
        module Slots :
          sig
            type ('tuple, 'variant) u =
                ('tuple, 'variant) Pool.Debug(Pool).Slots.u
            type ('tuple, 'variant) t = [ `Slots of ('tuple, 'variant) u ]
            val slots_per_tuple : ('a, 'b) t -> int
            type 'a0 t1 = ('a0, [ `S0 of 'a0 ]) t
            type ('a0, 'a1) t2 = ('a0 * 'a1, [ `S0 of 'a0 | `S1 of 'a1 ]) t
            type ('a0, 'a1, 'a2) t3 =
                ('a0 * 'a1 * 'a2, [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 ]) t
            type ('a0, 'a1, 'a2, 'a3) t4 =
                ('a0 * 'a1 * 'a2 * 'a3,
                 [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 | `S3 of 'a3 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4) t5 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6
                 | `S7 of 'a7 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7 * 'a8,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6
                 | `S7 of 'a7
                 | `S8 of 'a8 ])
                t
            val t1 : 'a t1
            val t2 : ('a, 'b) t2
            val t3 : ('a, 'b, 'c) t3
            val t4 : ('a, 'b, 'c, 'd) t4
            val t5 : ('a, 'b, 'c, 'd, 'e) t5
            val t6 : ('a, 'b, 'c, 'd, 'e, 'f) t6
            val t7 : ('a, 'b, 'c, 'd, 'e, 'f, 'g) t7
            val t8 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h) t8
            val t9 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) t9
            val sexp_of_t :
              ('tuple -> Sexplib.Sexp.t) ->
              ('variant -> Sexplib.Sexp.t) ->
              ('tuple, 'variant) t -> Sexplib.Sexp.t
            val sexp_of_t1 :
              ('a0 -> Sexplib.Sexp.t) -> 'a0 t1 -> Sexplib.Sexp.t
            val sexp_of_t2 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) -> ('a0, 'a1) t2 -> Sexplib.Sexp.t
            val sexp_of_t3 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) -> ('a0, 'a1, 'a2) t3 -> Sexplib.Sexp.t
            val sexp_of_t4 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3) t4 -> Sexplib.Sexp.t
            val sexp_of_t5 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4) t5 -> Sexplib.Sexp.t
            val sexp_of_t6 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 -> Sexplib.Sexp.t
            val sexp_of_t7 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 -> Sexplib.Sexp.t
            val sexp_of_t8 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a7 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 -> Sexplib.Sexp.t
            val sexp_of_t9 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a7 -> Sexplib.Sexp.t) ->
              ('a8 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 ->
              Sexplib.Sexp.t
          end
        module Slot :
          sig
            type ('variant, 'a) t = ('variant, 'a) Pool.Debug(Pool).Slot.t
            val equal : ('v, 'a) t -> ('v, 'a) t -> bool
            val t0 : ([> `S0 of 'a ], 'a) t
            val t1 : ([> `S1 of 'a ], 'a) t
            val t2 : ([> `S2 of 'a ], 'a) t
            val t3 : ([> `S3 of 'a ], 'a) t
            val t4 : ([> `S4 of 'a ], 'a) t
            val t5 : ([> `S5 of 'a ], 'a) t
            val t6 : ([> `S6 of 'a ], 'a) t
            val t7 : ([> `S7 of 'a ], 'a) t
            val t8 : ([> `S8 of 'a ], 'a) t
            val sexp_of_t :
              ('variant -> Sexplib.Sexp.t) ->
              ('-> Sexplib.Sexp.t) -> ('variant, 'a) t -> Sexplib.Sexp.t
          end
        module Pointer :
          sig
            type 'slots t = 'slots Pool.Debug(Pool).Pointer.t
            val null : unit -> 'a t
            val is_null : 'a t -> bool
            val phys_equal : 'a t -> 'a t -> bool
            val sexp_of_t :
              ('slots -> Sexplib.Sexp.t) -> 'slots t -> Sexplib.Sexp.t
          end
        type 'slots t = 'slots Pool.Debug(Pool).t
        val invariant :
          'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.inv
        val pointer_is_valid : 'slots t -> 'slots Pointer.t -> bool
        val id_of_pointer : 'slots t -> 'slots Pointer.t -> int
        val pointer_of_id :
          'slots t -> int -> 'slots Pointer.t Core.Std.Or_error.t
        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->
      sig
        module Slots :
          sig
            type ('tuple, 'variant) u =
                ('tuple, 'variant) Pool.Error_check(Pool).Slots.u
            type ('tuple, 'variant) t = [ `Slots of ('tuple, 'variant) u ]
            val slots_per_tuple : ('a, 'b) t -> int
            type 'a0 t1 = ('a0, [ `S0 of 'a0 ]) t
            type ('a0, 'a1) t2 = ('a0 * 'a1, [ `S0 of 'a0 | `S1 of 'a1 ]) t
            type ('a0, 'a1, 'a2) t3 =
                ('a0 * 'a1 * 'a2, [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 ]) t
            type ('a0, 'a1, 'a2, 'a3) t4 =
                ('a0 * 'a1 * 'a2 * 'a3,
                 [ `S0 of 'a0 | `S1 of 'a1 | `S2 of 'a2 | `S3 of 'a3 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4) t5 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6
                 | `S7 of 'a7 ])
                t
            type ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 =
                ('a0 * 'a1 * 'a2 * 'a3 * 'a4 * 'a5 * 'a6 * 'a7 * 'a8,
                 [ `S0 of 'a0
                 | `S1 of 'a1
                 | `S2 of 'a2
                 | `S3 of 'a3
                 | `S4 of 'a4
                 | `S5 of 'a5
                 | `S6 of 'a6
                 | `S7 of 'a7
                 | `S8 of 'a8 ])
                t
            val t1 : 'a t1
            val t2 : ('a, 'b) t2
            val t3 : ('a, 'b, 'c) t3
            val t4 : ('a, 'b, 'c, 'd) t4
            val t5 : ('a, 'b, 'c, 'd, 'e) t5
            val t6 : ('a, 'b, 'c, 'd, 'e, 'f) t6
            val t7 : ('a, 'b, 'c, 'd, 'e, 'f, 'g) t7
            val t8 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h) t8
            val t9 : ('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i) t9
            val sexp_of_t :
              ('tuple -> Sexplib.Sexp.t) ->
              ('variant -> Sexplib.Sexp.t) ->
              ('tuple, 'variant) t -> Sexplib.Sexp.t
            val sexp_of_t1 :
              ('a0 -> Sexplib.Sexp.t) -> 'a0 t1 -> Sexplib.Sexp.t
            val sexp_of_t2 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) -> ('a0, 'a1) t2 -> Sexplib.Sexp.t
            val sexp_of_t3 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) -> ('a0, 'a1, 'a2) t3 -> Sexplib.Sexp.t
            val sexp_of_t4 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3) t4 -> Sexplib.Sexp.t
            val sexp_of_t5 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4) t5 -> Sexplib.Sexp.t
            val sexp_of_t6 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5) t6 -> Sexplib.Sexp.t
            val sexp_of_t7 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6) t7 -> Sexplib.Sexp.t
            val sexp_of_t8 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a7 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7) t8 -> Sexplib.Sexp.t
            val sexp_of_t9 :
              ('a0 -> Sexplib.Sexp.t) ->
              ('a1 -> Sexplib.Sexp.t) ->
              ('a2 -> Sexplib.Sexp.t) ->
              ('a3 -> Sexplib.Sexp.t) ->
              ('a4 -> Sexplib.Sexp.t) ->
              ('a5 -> Sexplib.Sexp.t) ->
              ('a6 -> Sexplib.Sexp.t) ->
              ('a7 -> Sexplib.Sexp.t) ->
              ('a8 -> Sexplib.Sexp.t) ->
              ('a0, 'a1, 'a2, 'a3, 'a4, 'a5, 'a6, 'a7, 'a8) t9 ->
              Sexplib.Sexp.t
          end
        module Slot :
          sig
            type ('variant, 'a) t =
                ('variant, 'a) Pool.Error_check(Pool).Slot.t
            val equal : ('v, 'a) t -> ('v, 'a) t -> bool
            val t0 : ([> `S0 of 'a ], 'a) t
            val t1 : ([> `S1 of 'a ], 'a) t
            val t2 : ([> `S2 of 'a ], 'a) t
            val t3 : ([> `S3 of 'a ], 'a) t
            val t4 : ([> `S4 of 'a ], 'a) t
            val t5 : ([> `S5 of 'a ], 'a) t
            val t6 : ([> `S6 of 'a ], 'a) t
            val t7 : ([> `S7 of 'a ], 'a) t
            val t8 : ([> `S8 of 'a ], 'a) t
            val sexp_of_t :
              ('variant -> Sexplib.Sexp.t) ->
              ('-> Sexplib.Sexp.t) -> ('variant, 'a) t -> Sexplib.Sexp.t
          end
        module Pointer :
          sig
            type 'slots t = 'slots Pool.Error_check(Pool).Pointer.t
            val null : unit -> 'a t
            val is_null : 'a t -> bool
            val phys_equal : 'a t -> 'a t -> bool
            val sexp_of_t :
              ('slots -> Sexplib.Sexp.t) -> 'slots t -> Sexplib.Sexp.t
          end
        type 'slots t = 'slots Pool.Error_check(Pool).t
        val invariant :
          'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.inv
        val pointer_is_valid : 'slots t -> 'slots Pointer.t -> bool
        val id_of_pointer : 'slots t -> 'slots Pointer.t -> int
        val pointer_of_id :
          'slots t -> int -> 'slots Pointer.t Core.Std.Or_error.t
        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
      end
end