sig
  module T2 :
    sig
      type ('a, 'kind) t = ('a, 'kind) Throttle.T2.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