sig
  type t
  type file_info = string * Async.Std.Unix.Stats.t
  module Event :
    sig
      type move = Away of string | Into of string | Move of string * string
      type t =
          Created of string
        | Unlinked of string
        | Modified of string
        | Moved of Async_inotify.Event.move
      val to_string : Async_inotify.Event.t -> string
    end
  val create :
    ?recursive:bool ->
    ?watch_new_dirs:bool ->
    string ->
    (Async_inotify.t * Async_inotify.file_info list) Async.Std.Deferred.t
  val stop : Async_inotify.t -> unit Async.Std.Deferred.t
  val add : Async_inotify.t -> string -> unit Async.Std.Deferred.t
  val add_all :
    ?skip_dir:(string * Async.Std.Unix.Stats.t -> bool Async.Std.Deferred.t) ->
    Async_inotify.t ->
    string -> Async_inotify.file_info list Async.Std.Deferred.t
  val remove : Async_inotify.t -> string -> unit Async.Std.Deferred.t
  val stream : Async_inotify.t -> Async_inotify.Event.t Async.Std.Stream.t
  val pipe : Async_inotify.t -> Async_inotify.Event.t Async.Std.Pipe.Reader.t
end