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 = 'a Deferred.t
        val create :
          ('a Ivar.t -> unit) -> 'a Raw_deferred.Scheduler_dependent.t
        val peek : 'a Raw_deferred.Scheduler_dependent.t -> 'a option
        val is_determined : 'a Raw_deferred.Scheduler_dependent.t -> bool
        val return : 'a -> 'a Raw_deferred.Scheduler_dependent.t
        val upon :
          'a Raw_deferred.Scheduler_dependent.t -> ('a -> unit) -> unit
        val upon' :
          'a Raw_deferred.Scheduler_dependent.t ->
          ('a -> unit) -> Unregister.t
        val bind :
          'a Raw_deferred.Scheduler_dependent.t ->
          ('a -> 'b Raw_deferred.Scheduler_dependent.t) ->
          'b Raw_deferred.Scheduler_dependent.t
        val install_removable_handler :
          'a 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 :
          ('a -> Sexplib.Sexp.t) ->
          'a Raw_deferred.Scheduler_dependent.t -> Sexplib.Sexp.t
      end