sig
  module Debug :
    functor
      (Throttle : sig
                    module T2 :
                      sig
                        type ('a, 'kind) t
                        val invariant :
                          'Core_kernel.Invariant_intf.inv ->
                          'Core_kernel.Invariant_intf.inv ->
                          ('a, 'b) t Core_kernel.Invariant_intf.inv
                        val sexp_of_t :
                          ('-> Sexplib.Sexp.t) ->
                          ('kind -> Sexplib.Sexp.t) ->
                          ('a, 'kind) t -> Sexplib.Sexp.t
                      end
                    type 'a t = ('a, [ `throttle ]) T2.t
                    val invariant :
                      'Core_kernel.Invariant_intf.inv ->
                      'a t Core_kernel.Invariant_intf.inv
                    val create :
                      continue_on_error:bool ->
                      max_concurrent_jobs:int -> unit t
                    val create_with :
                      continue_on_error:bool -> 'a list -> 'a t
                    type 'a outcome =
                        [ `Aborted | `Ok of '| `Raised of exn ]
                    val enqueue' :
                      ('a, 'c) T2.t ->
                      ('-> 'Deferred.t) -> 'b outcome Deferred.t
                    val enqueue :
                      ('a, 'c) T2.t -> ('-> 'Deferred.t) -> 'Deferred.t
                    val prior_jobs_done : ('a, 'b) T2.t -> unit Deferred.t
                    val max_concurrent_jobs : ('a, 'b) T2.t -> int
                    val num_jobs_running : ('a, 'b) T2.t -> int
                    val num_jobs_waiting_to_start : ('a, 'b) T2.t -> int
                    val capacity_available : ('a, 'b) T2.t -> unit Deferred.t
                    val kill : 'a t -> unit
                    val is_dead : 'a t -> bool
                    val at_kill : 'a t -> ('-> unit Deferred.t) -> unit
                    val cleaned : 'a t -> unit Deferred.t
                    module Sequencer :
                      sig
                        type 'a t = ('a, [ `sequencer ]) T2.t
                        val create : ?continue_on_error:bool -> '-> 'a t
                        val sexp_of_t :
                          ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      end
                    val sexp_of_t :
                      ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    val sexp_of_outcome :
                      ('-> Sexplib.Sexp.t) -> 'a outcome -> Sexplib.Sexp.t
                  end->
      sig
        module T2 :
          sig
            type ('a, 'kind) t
            val invariant :
              'Core_kernel.Invariant_intf.inv ->
              'Core_kernel.Invariant_intf.inv ->
              ('a, 'b) t Core_kernel.Invariant_intf.inv
            val sexp_of_t :
              ('-> Sexplib.Sexp.t) ->
              ('kind -> Sexplib.Sexp.t) -> ('a, 'kind) t -> Sexplib.Sexp.t
          end
        type 'a t = ('a, [ `throttle ]) T2.t
        val invariant :
          'Core_kernel.Invariant_intf.inv ->
          'a t Core_kernel.Invariant_intf.inv
        val create :
          continue_on_error:bool -> max_concurrent_jobs:int -> unit t
        val create_with : continue_on_error:bool -> 'a list -> 'a t
        type 'a outcome = [ `Aborted | `Ok of '| `Raised of exn ]
        val enqueue' :
          ('a, 'c) T2.t -> ('-> 'Deferred.t) -> 'b outcome Deferred.t
        val enqueue : ('a, 'c) T2.t -> ('-> 'Deferred.t) -> 'Deferred.t
        val prior_jobs_done : ('a, 'b) T2.t -> unit Deferred.t
        val max_concurrent_jobs : ('a, 'b) T2.t -> int
        val num_jobs_running : ('a, 'b) T2.t -> int
        val num_jobs_waiting_to_start : ('a, 'b) T2.t -> int
        val capacity_available : ('a, 'b) T2.t -> unit Deferred.t
        val kill : 'a t -> unit
        val is_dead : 'a t -> bool
        val at_kill : 'a t -> ('-> unit Deferred.t) -> unit
        val cleaned : 'a t -> unit Deferred.t
        module Sequencer :
          sig
            type 'a t = ('a, [ `sequencer ]) T2.t
            val create : ?continue_on_error:bool -> '-> 'a t
            val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
          end
        val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
        val sexp_of_outcome :
          ('-> Sexplib.Sexp.t) -> 'a outcome -> Sexplib.Sexp.t
      end
end