functor (Scheduler : Import.Basic_scheduler) ->
  functor
    (Ivar : sig
              type 'a t
              val of_raw : ('a, Scheduler.Execution_context.t) ivar -> 'a t
              val to_raw : 'a t -> ('a, Scheduler.Execution_context.t) ivar
            end) ->
    sig
      type 'a t = 'a Ivar.t
      val equal :
        'a Raw_ivar.Scheduler_dependent.t ->
        'a Raw_ivar.Scheduler_dependent.t -> bool
      val create : unit -> 'a Raw_ivar.Scheduler_dependent.t
      val create_full : 'a -> 'a Raw_ivar.Scheduler_dependent.t
      val peek : 'a Raw_ivar.Scheduler_dependent.t -> 'a option
      val is_empty : 'a Raw_ivar.Scheduler_dependent.t -> bool
      val is_full : 'a Raw_ivar.Scheduler_dependent.t -> bool
      val connect :
        bind_result:'a Raw_ivar.Scheduler_dependent.t ->
        bind_rhs:'a Raw_ivar.Scheduler_dependent.t -> unit
      val fill : 'a Raw_ivar.Scheduler_dependent.t -> 'a -> unit
      val install_removable_handler :
        'a Raw_ivar.Scheduler_dependent.t ->
        ('a, Scheduler.Execution_context.t) Raw_handler.t -> Unregister.t
      val upon : 'a Raw_ivar.Scheduler_dependent.t -> ('a -> unit) -> unit
      val upon' :
        'a Raw_ivar.Scheduler_dependent.t -> ('a -> unit) -> Unregister.t
      val of_raw : ('a, Scheduler.Execution_context.t) ivar -> 'a t
      val to_raw : 'a t -> ('a, Scheduler.Execution_context.t) ivar
      val sexp_of_t :
        ('a -> Sexplib.Sexp.t) ->
        'a Raw_ivar.Scheduler_dependent.t -> Sexplib.Sexp.t
    end