sig
  type t = {
    mutable check_access : (unit -> unit) option;
    jobs :
      Raw_scheduler.Execution_context.t Job.t Jobs.t Core.Std.sexp_opaque;
    mutable main_execution_context : Raw_scheduler.Execution_context.t;
    mutable current_execution_context : Raw_scheduler.Execution_context.t;
    mutable max_num_jobs_per_priority_per_cycle : int;
    mutable uncaught_exn : Core.Std.Error.t option;
    mutable global_kill_index : Kill_index.t;
    mutable num_jobs_run : int;
    mutable cycle_count : int;
    mutable cycle_start : Core.Std.Time.t;
    mutable last_cycle_time : Core.Std.Time.Span.t;
    cycle_times : Core.Std.Time.Span.t Raw_scheduler.tail;
    mutable last_cycle_num_jobs : int;
    cycle_num_jobs : int Raw_scheduler.tail;
    events : Raw_scheduler.Execution_context.t Job.t Import.Timing_wheel.t;
    finalizer_jobs :
      Raw_scheduler.Execution_context.t Job.t Core.Std.Thread_safe_queue.t
      Core.Std.sexp_opaque;
    mutable thread_safe_finalizer_hook : unit -> unit;
  }
  val sexp_of_t : Raw_scheduler.T.t -> Sexplib.Sexp.t
  val thread_safe_finalizer_hook : Raw_scheduler.T.t -> unit -> unit
  val set_thread_safe_finalizer_hook :
    Raw_scheduler.T.t -> (unit -> unit) -> unit
  val finalizer_jobs :
    Raw_scheduler.T.t ->
    Raw_scheduler.Execution_context.t Job.t Core.Std.Thread_safe_queue.t
    Core.Std.sexp_opaque
  val events :
    Raw_scheduler.T.t ->
    Raw_scheduler.Execution_context.t Job.t Import.Timing_wheel.t
  val cycle_num_jobs : Raw_scheduler.T.t -> int Raw_scheduler.tail
  val last_cycle_num_jobs : Raw_scheduler.T.t -> int
  val set_last_cycle_num_jobs : Raw_scheduler.T.t -> int -> unit
  val cycle_times :
    Raw_scheduler.T.t -> Core.Std.Time.Span.t Raw_scheduler.tail
  val last_cycle_time : Raw_scheduler.T.t -> Core.Std.Time.Span.t
  val set_last_cycle_time : Raw_scheduler.T.t -> Core.Std.Time.Span.t -> unit
  val cycle_start : Raw_scheduler.T.t -> Core.Std.Time.t
  val set_cycle_start : Raw_scheduler.T.t -> Core.Std.Time.t -> unit
  val cycle_count : Raw_scheduler.T.t -> int
  val set_cycle_count : Raw_scheduler.T.t -> int -> unit
  val num_jobs_run : Raw_scheduler.T.t -> int
  val set_num_jobs_run : Raw_scheduler.T.t -> int -> unit
  val global_kill_index : Raw_scheduler.T.t -> Kill_index.t
  val set_global_kill_index : Raw_scheduler.T.t -> Kill_index.t -> unit
  val uncaught_exn : Raw_scheduler.T.t -> Core.Std.Error.t option
  val set_uncaught_exn : Raw_scheduler.T.t -> Core.Std.Error.t option -> unit
  val max_num_jobs_per_priority_per_cycle : Raw_scheduler.T.t -> int
  val set_max_num_jobs_per_priority_per_cycle :
    Raw_scheduler.T.t -> int -> unit
  val current_execution_context :
    Raw_scheduler.T.t -> Raw_scheduler.Execution_context.t
  val set_current_execution_context :
    Raw_scheduler.T.t -> Raw_scheduler.Execution_context.t -> unit
  val main_execution_context :
    Raw_scheduler.T.t -> Raw_scheduler.Execution_context.t
  val set_main_execution_context :
    Raw_scheduler.T.t -> Raw_scheduler.Execution_context.t -> unit
  val jobs :
    Raw_scheduler.T.t ->
    Raw_scheduler.Execution_context.t Job.t Jobs.t Core.Std.sexp_opaque
  val check_access : Raw_scheduler.T.t -> (unit -> unit) option
  val set_check_access : Raw_scheduler.T.t -> (unit -> unit) option -> unit
  module Fields :
    sig
      val names : string list
      val thread_safe_finalizer_hook :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, unit -> unit)
        Fieldslib.Field.t_with_perm
      val finalizer_jobs :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Raw_scheduler.Execution_context.t Job.t Core.Std.Thread_safe_queue.t
         Core.Std.sexp_opaque)
        Fieldslib.Field.t_with_perm
      val events :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Raw_scheduler.Execution_context.t Job.t Import.Timing_wheel.t)
        Fieldslib.Field.t_with_perm
      val cycle_num_jobs :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         int Raw_scheduler.tail)
        Fieldslib.Field.t_with_perm
      val last_cycle_num_jobs :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
        Fieldslib.Field.t_with_perm
      val cycle_times :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Core.Std.Time.Span.t Raw_scheduler.tail)
        Fieldslib.Field.t_with_perm
      val last_cycle_time :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Core.Std.Time.Span.t)
        Fieldslib.Field.t_with_perm
      val cycle_start :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, Core.Std.Time.t)
        Fieldslib.Field.t_with_perm
      val cycle_count :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
        Fieldslib.Field.t_with_perm
      val num_jobs_run :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
        Fieldslib.Field.t_with_perm
      val global_kill_index :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, Kill_index.t)
        Fieldslib.Field.t_with_perm
      val uncaught_exn :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Core.Std.Error.t option)
        Fieldslib.Field.t_with_perm
      val max_num_jobs_per_priority_per_cycle :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
        Fieldslib.Field.t_with_perm
      val current_execution_context :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Raw_scheduler.Execution_context.t)
        Fieldslib.Field.t_with_perm
      val main_execution_context :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Raw_scheduler.Execution_context.t)
        Fieldslib.Field.t_with_perm
      val jobs :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         Raw_scheduler.Execution_context.t Job.t Jobs.t Core.Std.sexp_opaque)
        Fieldslib.Field.t_with_perm
      val check_access :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
         (unit -> unit) option)
        Fieldslib.Field.t_with_perm
      val make_creator :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm ->
                      '-> ('-> (unit -> unit) option) * 'c) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm ->
              '->
              ('->
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque) *
              'd) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm ->
                                '->
                                ('-> Raw_scheduler.Execution_context.t) *
                                'e) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm ->
                                   '->
                                   ('-> Raw_scheduler.Execution_context.t) *
                                   'f) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             '-> ('-> int) * 'g) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm ->
                      '-> ('-> Core.Std.Error.t option) * 'h) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm ->
                           '-> ('-> Kill_index.t) * 'i) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> '-> ('-> int) * 'j) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> '-> ('-> int) * 'k) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm ->
                     '-> ('-> Core.Std.Time.t) * 'l) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm ->
                         '-> ('-> Core.Std.Time.Span.t) * 'm) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm ->
                     '->
                     ('-> Core.Std.Time.Span.t Raw_scheduler.tail) * 'n) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm ->
                             '-> ('-> int) * 'o) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm ->
                        '-> ('-> int Raw_scheduler.tail) * 'p) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm ->
                '->
                ('->
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t) *
                'q) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm ->
                        '->
                        ('->
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque) *
                        'r) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm ->
                                    '-> ('-> unit -> unit) * 's) ->
        '-> ('-> Raw_scheduler.T.t) * 's
      val create :
        check_access:(unit -> unit) option ->
        jobs:Raw_scheduler.Execution_context.t Job.t Jobs.t
             Core.Std.sexp_opaque ->
        main_execution_context:Raw_scheduler.Execution_context.t ->
        current_execution_context:Raw_scheduler.Execution_context.t ->
        max_num_jobs_per_priority_per_cycle:int ->
        uncaught_exn:Core.Std.Error.t option ->
        global_kill_index:Kill_index.t ->
        num_jobs_run:int ->
        cycle_count:int ->
        cycle_start:Core.Std.Time.t ->
        last_cycle_time:Core.Std.Time.Span.t ->
        cycle_times:Core.Std.Time.Span.t Raw_scheduler.tail ->
        last_cycle_num_jobs:int ->
        cycle_num_jobs:int Raw_scheduler.tail ->
        events:Raw_scheduler.Execution_context.t Job.t Import.Timing_wheel.t ->
        finalizer_jobs:Raw_scheduler.Execution_context.t Job.t
                       Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque ->
        thread_safe_finalizer_hook:(unit -> unit) -> Raw_scheduler.T.t
      val map :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> (unit -> unit) option) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm ->
              Raw_scheduler.Execution_context.t Job.t Jobs.t
              Core.Std.sexp_opaque) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm ->
                                Raw_scheduler.Execution_context.t) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm ->
                                   Raw_scheduler.Execution_context.t) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             int) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> Core.Std.Error.t option) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> Kill_index.t) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> int) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> int) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> Core.Std.Time.t) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> Core.Std.Time.Span.t) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm ->
                     Core.Std.Time.Span.t Raw_scheduler.tail) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> int) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> int Raw_scheduler.tail) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm ->
                Raw_scheduler.Execution_context.t Job.t Import.Timing_wheel.t) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm ->
                        Raw_scheduler.Execution_context.t Job.t
                        Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm ->
                                    unit -> unit) ->
        Raw_scheduler.T.t
      val iter :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> 'a) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm -> 'b) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm -> 'c) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm -> 'd) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             'e) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> 'f) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> 'g) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> 'h) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> 'i) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> 'j) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> 'k) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm -> 'l) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'm) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> 'n) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm -> 'o) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm -> 'p) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm -> 'q) ->
        'q
      val fold :
        init:'->
        check_access:('->
                      ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> 'b) ->
        jobs:('->
              ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm -> 'c) ->
        main_execution_context:('->
                                ([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm -> 'd) ->
        current_execution_context:('->
                                   ([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm -> 'e) ->
        max_num_jobs_per_priority_per_cycle:('->
                                             ([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             'f) ->
        uncaught_exn:('->
                      ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> 'g) ->
        global_kill_index:('->
                           ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> 'h) ->
        num_jobs_run:('->
                      ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> 'i) ->
        cycle_count:('->
                     ([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> 'j) ->
        cycle_start:('->
                     ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> 'k) ->
        last_cycle_time:('->
                         ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> 'l) ->
        cycle_times:('->
                     ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm -> 'm) ->
        last_cycle_num_jobs:('->
                             ([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'n) ->
        cycle_num_jobs:('->
                        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> 'o) ->
        events:('->
                ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm -> 'p) ->
        finalizer_jobs:('->
                        ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm -> 'q) ->
        thread_safe_finalizer_hook:('->
                                    ([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm -> 'r) ->
        'r
      val map_poly :
        ([< `Read | `Set_and_create ], Raw_scheduler.T.t, 'a)
        Fieldslib.Field.user -> 'a list
      val for_all :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> bool) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm -> bool) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm -> bool) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm -> bool) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             bool) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> bool) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> bool) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> bool) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> bool) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> bool) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> bool) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm -> bool) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> bool) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm -> bool) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm -> bool) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val exists :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> bool) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm -> bool) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm -> bool) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm -> bool) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             bool) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> bool) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> bool) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> bool) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> bool) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> bool) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> bool) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm -> bool) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> bool) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm -> bool) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm -> bool) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val to_list :
        check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       (unit -> unit) option)
                      Fieldslib.Field.t_with_perm -> 'a) ->
        jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
               Raw_scheduler.Execution_context.t Job.t Jobs.t
               Core.Std.sexp_opaque)
              Fieldslib.Field.t_with_perm -> 'a) ->
        main_execution_context:(([< `Read | `Set_and_create ],
                                 Raw_scheduler.T.t,
                                 Raw_scheduler.Execution_context.t)
                                Fieldslib.Field.t_with_perm -> 'a) ->
        current_execution_context:(([< `Read | `Set_and_create ],
                                    Raw_scheduler.T.t,
                                    Raw_scheduler.Execution_context.t)
                                   Fieldslib.Field.t_with_perm -> 'a) ->
        max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                              Raw_scheduler.T.t, int)
                                             Fieldslib.Field.t_with_perm ->
                                             'a) ->
        uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                       Core.Std.Error.t option)
                      Fieldslib.Field.t_with_perm -> 'a) ->
        global_kill_index:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                            Kill_index.t)
                           Fieldslib.Field.t_with_perm -> 'a) ->
        num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                      Fieldslib.Field.t_with_perm -> 'a) ->
        cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t, int)
                     Fieldslib.Field.t_with_perm -> 'a) ->
        cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.t)
                     Fieldslib.Field.t_with_perm -> 'a) ->
        last_cycle_time:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t)
                         Fieldslib.Field.t_with_perm -> 'a) ->
        cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                      Core.Std.Time.Span.t Raw_scheduler.tail)
                     Fieldslib.Field.t_with_perm -> 'a) ->
        last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'a) ->
        cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         int Raw_scheduler.tail)
                        Fieldslib.Field.t_with_perm -> 'a) ->
        events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                 Raw_scheduler.Execution_context.t Job.t
                 Import.Timing_wheel.t)
                Fieldslib.Field.t_with_perm -> 'a) ->
        finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                         Raw_scheduler.Execution_context.t Job.t
                         Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque)
                        Fieldslib.Field.t_with_perm -> 'a) ->
        thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t, unit -> unit)
                                    Fieldslib.Field.t_with_perm -> 'a) ->
        'a list
      module Direct :
        sig
          val iter :
            Raw_scheduler.T.t ->
            check_access:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           (unit -> unit) option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> (unit -> unit) option -> 'a) ->
            jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                   Raw_scheduler.Execution_context.t Job.t Jobs.t
                   Core.Std.sexp_opaque)
                  Fieldslib.Field.t_with_perm ->
                  Raw_scheduler.T.t ->
                  Raw_scheduler.Execution_context.t Job.t Jobs.t
                  Core.Std.sexp_opaque -> 'b) ->
            main_execution_context:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t,
                                     Raw_scheduler.Execution_context.t)
                                    Fieldslib.Field.t_with_perm ->
                                    Raw_scheduler.T.t ->
                                    Raw_scheduler.Execution_context.t -> 'c) ->
            current_execution_context:(([< `Read | `Set_and_create ],
                                        Raw_scheduler.T.t,
                                        Raw_scheduler.Execution_context.t)
                                       Fieldslib.Field.t_with_perm ->
                                       Raw_scheduler.T.t ->
                                       Raw_scheduler.Execution_context.t ->
                                       'd) ->
            max_num_jobs_per_priority_per_cycle:(([< `Read | `Set_and_create ],
                                                  Raw_scheduler.T.t, 
                                                  int)
                                                 Fieldslib.Field.t_with_perm ->
                                                 Raw_scheduler.T.t ->
                                                 int -> 'e) ->
            uncaught_exn:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           Core.Std.Error.t option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> Core.Std.Error.t option -> 'f) ->
            global_kill_index:(([< `Read | `Set_and_create ],
                                Raw_scheduler.T.t, Kill_index.t)
                               Fieldslib.Field.t_with_perm ->
                               Raw_scheduler.T.t -> Kill_index.t -> 'g) ->
            num_jobs_run:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           int)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> int -> 'h) ->
            cycle_count:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          int)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t -> int -> 'i) ->
            cycle_start:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.t)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t -> Core.Std.Time.t -> 'j) ->
            last_cycle_time:(([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, Core.Std.Time.Span.t)
                             Fieldslib.Field.t_with_perm ->
                             Raw_scheduler.T.t -> Core.Std.Time.Span.t -> 'k) ->
            cycle_times:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t Raw_scheduler.tail)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t ->
                         Core.Std.Time.Span.t Raw_scheduler.tail -> 'l) ->
            last_cycle_num_jobs:(([< `Read | `Set_and_create ],
                                  Raw_scheduler.T.t, int)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_scheduler.T.t -> int -> 'm) ->
            cycle_num_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                             int Raw_scheduler.tail)
                            Fieldslib.Field.t_with_perm ->
                            Raw_scheduler.T.t -> int Raw_scheduler.tail -> 'n) ->
            events:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                     Raw_scheduler.Execution_context.t Job.t
                     Import.Timing_wheel.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.T.t ->
                    Raw_scheduler.Execution_context.t Job.t
                    Import.Timing_wheel.t -> 'o) ->
            finalizer_jobs:(([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                             Raw_scheduler.Execution_context.t Job.t
                             Core.Std.Thread_safe_queue.t
                             Core.Std.sexp_opaque)
                            Fieldslib.Field.t_with_perm ->
                            Raw_scheduler.T.t ->
                            Raw_scheduler.Execution_context.t Job.t
                            Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque ->
                            'p) ->
            thread_safe_finalizer_hook:(([< `Read | `Set_and_create ],
                                         Raw_scheduler.T.t, unit -> unit)
                                        Fieldslib.Field.t_with_perm ->
                                        Raw_scheduler.T.t ->
                                        (unit -> unit) -> 'q) ->
            'q
          val fold :
            Raw_scheduler.T.t ->
            init:'->
            check_access:('->
                          ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           (unit -> unit) option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> (unit -> unit) option -> 'b) ->
            jobs:('->
                  ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                   Raw_scheduler.Execution_context.t Job.t Jobs.t
                   Core.Std.sexp_opaque)
                  Fieldslib.Field.t_with_perm ->
                  Raw_scheduler.T.t ->
                  Raw_scheduler.Execution_context.t Job.t Jobs.t
                  Core.Std.sexp_opaque -> 'c) ->
            main_execution_context:('->
                                    ([< `Read | `Set_and_create ],
                                     Raw_scheduler.T.t,
                                     Raw_scheduler.Execution_context.t)
                                    Fieldslib.Field.t_with_perm ->
                                    Raw_scheduler.T.t ->
                                    Raw_scheduler.Execution_context.t -> 'd) ->
            current_execution_context:('->
                                       ([< `Read | `Set_and_create ],
                                        Raw_scheduler.T.t,
                                        Raw_scheduler.Execution_context.t)
                                       Fieldslib.Field.t_with_perm ->
                                       Raw_scheduler.T.t ->
                                       Raw_scheduler.Execution_context.t ->
                                       'e) ->
            max_num_jobs_per_priority_per_cycle:('->
                                                 ([< `Read | `Set_and_create ],
                                                  Raw_scheduler.T.t, 
                                                  int)
                                                 Fieldslib.Field.t_with_perm ->
                                                 Raw_scheduler.T.t ->
                                                 int -> 'f) ->
            uncaught_exn:('->
                          ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           Core.Std.Error.t option)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> Core.Std.Error.t option -> 'g) ->
            global_kill_index:('->
                               ([< `Read | `Set_and_create ],
                                Raw_scheduler.T.t, Kill_index.t)
                               Fieldslib.Field.t_with_perm ->
                               Raw_scheduler.T.t -> Kill_index.t -> 'h) ->
            num_jobs_run:('->
                          ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                           int)
                          Fieldslib.Field.t_with_perm ->
                          Raw_scheduler.T.t -> int -> 'i) ->
            cycle_count:('->
                         ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          int)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t -> int -> 'j) ->
            cycle_start:('->
                         ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.t)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t -> Core.Std.Time.t -> 'k) ->
            last_cycle_time:('->
                             ([< `Read | `Set_and_create ],
                              Raw_scheduler.T.t, Core.Std.Time.Span.t)
                             Fieldslib.Field.t_with_perm ->
                             Raw_scheduler.T.t -> Core.Std.Time.Span.t -> 'l) ->
            cycle_times:('->
                         ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                          Core.Std.Time.Span.t Raw_scheduler.tail)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.T.t ->
                         Core.Std.Time.Span.t Raw_scheduler.tail -> 'm) ->
            last_cycle_num_jobs:('->
                                 ([< `Read | `Set_and_create ],
                                  Raw_scheduler.T.t, int)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_scheduler.T.t -> int -> 'n) ->
            cycle_num_jobs:('->
                            ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                             int Raw_scheduler.tail)
                            Fieldslib.Field.t_with_perm ->
                            Raw_scheduler.T.t -> int Raw_scheduler.tail -> 'o) ->
            events:('->
                    ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                     Raw_scheduler.Execution_context.t Job.t
                     Import.Timing_wheel.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.T.t ->
                    Raw_scheduler.Execution_context.t Job.t
                    Import.Timing_wheel.t -> 'p) ->
            finalizer_jobs:('->
                            ([< `Read | `Set_and_create ], Raw_scheduler.T.t,
                             Raw_scheduler.Execution_context.t Job.t
                             Core.Std.Thread_safe_queue.t
                             Core.Std.sexp_opaque)
                            Fieldslib.Field.t_with_perm ->
                            Raw_scheduler.T.t ->
                            Raw_scheduler.Execution_context.t Job.t
                            Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque ->
                            'q) ->
            thread_safe_finalizer_hook:('->
                                        ([< `Read | `Set_and_create ],
                                         Raw_scheduler.T.t, unit -> unit)
                                        Fieldslib.Field.t_with_perm ->
                                        Raw_scheduler.T.t ->
                                        (unit -> unit) -> 'r) ->
            'r
        end
    end
end