sig
  type ('a, 'b) open_callback = 'a -> 'b Lwt.t
  type 'a read_callback = 'a -> string -> int Lwt.t
  type 'a skip_callback = 'a -> int -> int Lwt.t
  type 'a close_callback = 'a -> unit Lwt.t
  module Read :
    sig
      type ('a, 'b) input =
          [ `Callback of
              ('a, 'b) ArchiveLwt.open_callback *
              'b ArchiveLwt.read_callback * 'b ArchiveLwt.skip_callback *
              'b ArchiveLwt.close_callback * 'a
          | `Filename of ArchiveLow.filename ]
      type ('a, 'b) t
      val create :
        ('a, 'b) ArchiveLwt.Read.input -> ('a, 'b) ArchiveLwt.Read.t Lwt.t
      val file_exists :
        ('a, 'b) ArchiveLwt.Read.t -> ArchiveLow.filename -> bool
      val stat :
        ('a, 'b) ArchiveLwt.Read.t ->
        ArchiveLow.filename -> Unix.LargeFile.stats
      val is_directory :
        ('a, 'b) ArchiveLwt.Read.t -> ArchiveLow.filename -> bool
      val entry :
        ('a, 'b) ArchiveLwt.Read.t ->
        ArchiveLow.filename -> ArchiveLow.Entry.t
      val with_file :
        ('a, 'b) ArchiveLwt.Read.t ->
        ArchiveLow.filename ->
        (ArchiveLow.Entry.t -> 'c Lwt.t) ->
        ('c -> string -> int -> 'c Lwt.t) -> ('c -> 'd Lwt.t) -> 'd Lwt.t
      val content :
        ('a, 'b) ArchiveLwt.Read.t -> ArchiveLow.filename -> string Lwt.t
      val readdir :
        ('a, 'b) ArchiveLwt.Read.t ->
        ArchiveLow.filename -> ArchiveLow.filename array
    end
end