sig
  module type S =
    sig
      type t
      val invariant : t Core_kernel.Invariant_intf.inv
      val backend : Import.Config.File_descr_watcher.t
      val create : num_file_descrs:int -> t
      val set : t -> Import.File_descr.t -> bool Read_write.t -> unit
      val iter :
        t -> f:(Import.File_descr.t -> Read_write.Key.t -> unit) -> unit
      module Pre : sig type t val sexp_of_t : t -> Sexplib.Sexp.t end
      val pre_check : t -> Pre.t
      module Check_result :
        sig type t val sexp_of_t : t -> Sexplib.Sexp.t end
      val thread_safe_check :
        t ->
        Pre.t -> timeout:File_descr_watcher_intf.Timeout.t -> Check_result.t
      val post_check :
        t ->
        Check_result.t ->
        [ `Ok of File_descr_watcher_intf.Post.t Read_write.t
        | `Syscall_interrupted
        | `Timeout ]
      val sexp_of_t : t -> Sexplib.Sexp.t
      val watcher : t
    end
  type t = (module Raw_scheduler.File_descr_watcher.S)
  val sexp_of_t :
    (module Raw_scheduler.File_descr_watcher.S-> Sexplib.Sexp.t
end