functor (Scheduler : Import.Basic_scheduler->
  functor
    (Deferred : sig
                  type 'a t
                  val of_raw : ('a, Scheduler.Execution_context.t) t -> 'a t
                  val to_raw : 'a t -> ('a, Scheduler.Execution_context.t) t
                end->
    functor
      (Ivar : sig
                type 'a t
                val of_raw :
                  ('a, Scheduler.Execution_context.t) Raw_ivar.t -> 'a t
                val to_raw :
                  'a t -> ('a, Scheduler.Execution_context.t) Raw_ivar.t
              end->
      sig
        type 'a t = 'Deferred.t
        val create :
          ('Ivar.t -> unit) -> 'Raw_deferred.Scheduler_dependent.t
        val peek : 'Raw_deferred.Scheduler_dependent.t -> 'a option
        val is_determined : 'Raw_deferred.Scheduler_dependent.t -> bool
        val return : '-> 'Raw_deferred.Scheduler_dependent.t
        val upon :
          'Raw_deferred.Scheduler_dependent.t -> ('-> unit) -> unit
        val upon' :
          'Raw_deferred.Scheduler_dependent.t ->
          ('-> unit) -> Unregister.t
        val bind :
          'Raw_deferred.Scheduler_dependent.t ->
          ('-> 'Raw_deferred.Scheduler_dependent.t) ->
          'Raw_deferred.Scheduler_dependent.t
        val install_removable_handler :
          'Raw_deferred.Scheduler_dependent.t ->
          ('a, Scheduler.Execution_context.t) Raw_handler.t -> Unregister.t
        val of_raw : ('a, Scheduler.Execution_context.t) deferred -> 'a t
        val to_raw : 'a t -> ('a, Scheduler.Execution_context.t) deferred
        val sexp_of_t :
          ('-> Sexplib.Sexp.t) ->
          'Raw_deferred.Scheduler_dependent.t -> Sexplib.Sexp.t
      end