sig
  module Slots :
    sig
      type ('tuple, 'variant) u = ('tuple, 'variant) Flat_tuple_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) Flat_tuple_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
  type 'slots t = 'slots Flat_tuple_array.t
  val invariant : 'Core.Std.Invariant.inv -> 'a t Core.Std.Invariant.inv
  val create :
    ('tuple, 'a) Slots.t -> len:int -> 'tuple -> ('tuple, 'a) Slots.t t
  val length : 'a t -> int
  val get : ('b, 'v) Slots.t t -> int -> ('v, 'a) Slot.t -> 'a
  val unsafe_get : ('b, 'v) Slots.t t -> int -> ('v, 'a) Slot.t -> 'a
  val set : ('b, 'v) Slots.t t -> int -> ('v, 'a) Slot.t -> '-> unit
  val unsafe_set : ('b, 'v) Slots.t t -> int -> ('v, 'a) Slot.t -> '-> unit
  val get_tuple : ('tuple, 'a) Slots.t t -> int -> 'tuple
  val sexp_of_t : ('slots -> Sexplib.Sexp.t) -> 'slots t -> Sexplib.Sexp.t
end