sig
  val iter :
    Raw_scheduler.t ->
    mutex:(([< `Read | `Set_and_create ], Raw_scheduler.t,
            Core.Std.Nano_mutex.t)
           Fieldslib.Field.t_with_perm ->
           Raw_scheduler.t -> Core.Std.Nano_mutex.t -> 'a) ->
    is_running:(([< `Read | `Set_and_create ], Raw_scheduler.t, bool)
                Fieldslib.Field.t_with_perm -> Raw_scheduler.t -> bool -> 'b) ->
    have_called_go:(([< `Read | `Set_and_create ], Raw_scheduler.t, bool)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> bool -> 'c) ->
    fds_whose_watching_has_changed:(([< `Read | `Set_and_create ],
                                     Raw_scheduler.t,
                                     Raw_scheduler.Fd.t list)
                                    Fieldslib.Field.t_with_perm ->
                                    Raw_scheduler.t ->
                                    Raw_scheduler.Fd.t list -> 'd) ->
    file_descr_watcher:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                         Raw_scheduler.File_descr_watcher.t)
                        Fieldslib.Field.t_with_perm ->
                        Raw_scheduler.t ->
                        Raw_scheduler.File_descr_watcher.t -> 'e) ->
    fd_by_descr:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Fd_by_descr.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Fd_by_descr.t -> 'f) ->
    timerfd:(([< `Read | `Set_and_create ], Raw_scheduler.t,
              Core.Std.Linux_ext.Timerfd.t option)
             Fieldslib.Field.t_with_perm ->
             Raw_scheduler.t -> Core.Std.Linux_ext.Timerfd.t option -> 'g) ->
    scheduler_thread_id:(([< `Read | `Set_and_create ], Raw_scheduler.t, int)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.t -> int -> 'h) ->
    interruptor:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Interruptor.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Interruptor.t -> 'i) ->
    signal_manager:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                     Raw_signal_manager.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> Raw_signal_manager.t -> 'j) ->
    thread_pool:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Thread_pool.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Thread_pool.t -> 'k) ->
    handle_thread_pool_stuck:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                               Core.Std.Time.Span.t -> unit)
                              Fieldslib.Field.t_with_perm ->
                              Raw_scheduler.t ->
                              (Core.Std.Time.Span.t -> unit) -> 'l) ->
    busy_pollers:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                   Busy_pollers.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_scheduler.t -> Busy_pollers.t -> 'm) ->
    busy_poll_thread_is_running:(([< `Read | `Set_and_create ],
                                  Raw_scheduler.t, bool)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_scheduler.t -> bool -> 'n) ->
    core_scheduler:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                     Import.Core_scheduler.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> Import.Core_scheduler.t -> 'o) ->
    max_inter_cycle_timeout:(([< `Read | `Set_and_create ], Raw_scheduler.t,
                              Import.Max_inter_cycle_timeout.t)
                             Fieldslib.Field.t_with_perm ->
                             Raw_scheduler.t ->
                             Import.Max_inter_cycle_timeout.t -> 'p) ->
    'p
  val fold :
    Raw_scheduler.t ->
    init:'->
    mutex:('->
           ([< `Read | `Set_and_create ], Raw_scheduler.t,
            Core.Std.Nano_mutex.t)
           Fieldslib.Field.t_with_perm ->
           Raw_scheduler.t -> Core.Std.Nano_mutex.t -> 'b) ->
    is_running:('->
                ([< `Read | `Set_and_create ], Raw_scheduler.t, bool)
                Fieldslib.Field.t_with_perm -> Raw_scheduler.t -> bool -> 'c) ->
    have_called_go:('->
                    ([< `Read | `Set_and_create ], Raw_scheduler.t, bool)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> bool -> 'd) ->
    fds_whose_watching_has_changed:('->
                                    ([< `Read | `Set_and_create ],
                                     Raw_scheduler.t,
                                     Raw_scheduler.Fd.t list)
                                    Fieldslib.Field.t_with_perm ->
                                    Raw_scheduler.t ->
                                    Raw_scheduler.Fd.t list -> 'e) ->
    file_descr_watcher:('->
                        ([< `Read | `Set_and_create ], Raw_scheduler.t,
                         Raw_scheduler.File_descr_watcher.t)
                        Fieldslib.Field.t_with_perm ->
                        Raw_scheduler.t ->
                        Raw_scheduler.File_descr_watcher.t -> 'f) ->
    fd_by_descr:('->
                 ([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Fd_by_descr.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Fd_by_descr.t -> 'g) ->
    timerfd:('->
             ([< `Read | `Set_and_create ], Raw_scheduler.t,
              Core.Std.Linux_ext.Timerfd.t option)
             Fieldslib.Field.t_with_perm ->
             Raw_scheduler.t -> Core.Std.Linux_ext.Timerfd.t option -> 'h) ->
    scheduler_thread_id:('->
                         ([< `Read | `Set_and_create ], Raw_scheduler.t, int)
                         Fieldslib.Field.t_with_perm ->
                         Raw_scheduler.t -> int -> 'i) ->
    interruptor:('->
                 ([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Interruptor.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Interruptor.t -> 'j) ->
    signal_manager:('->
                    ([< `Read | `Set_and_create ], Raw_scheduler.t,
                     Raw_signal_manager.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> Raw_signal_manager.t -> 'k) ->
    thread_pool:('->
                 ([< `Read | `Set_and_create ], Raw_scheduler.t,
                  Thread_pool.t)
                 Fieldslib.Field.t_with_perm ->
                 Raw_scheduler.t -> Thread_pool.t -> 'l) ->
    handle_thread_pool_stuck:('->
                              ([< `Read | `Set_and_create ], Raw_scheduler.t,
                               Core.Std.Time.Span.t -> unit)
                              Fieldslib.Field.t_with_perm ->
                              Raw_scheduler.t ->
                              (Core.Std.Time.Span.t -> unit) -> 'm) ->
    busy_pollers:('->
                  ([< `Read | `Set_and_create ], Raw_scheduler.t,
                   Busy_pollers.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_scheduler.t -> Busy_pollers.t -> 'n) ->
    busy_poll_thread_is_running:('->
                                 ([< `Read | `Set_and_create ],
                                  Raw_scheduler.t, bool)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_scheduler.t -> bool -> 'o) ->
    core_scheduler:('->
                    ([< `Read | `Set_and_create ], Raw_scheduler.t,
                     Import.Core_scheduler.t)
                    Fieldslib.Field.t_with_perm ->
                    Raw_scheduler.t -> Import.Core_scheduler.t -> 'p) ->
    max_inter_cycle_timeout:('->
                             ([< `Read | `Set_and_create ], Raw_scheduler.t,
                              Import.Max_inter_cycle_timeout.t)
                             Fieldslib.Field.t_with_perm ->
                             Raw_scheduler.t ->
                             Import.Max_inter_cycle_timeout.t -> 'q) ->
    'q
end