sig
  type ('a, 'b) open_callback = '-> 'Lwt.t
  type 'a read_callback = '-> string -> int Lwt.t
  type 'a skip_callback = '-> int -> int Lwt.t
  type 'a close_callback = '-> unit Lwt.t
  module Read :
    sig
      type ('a, 'b) input =
          [ `Callback of
              ('a, 'b) ArchiveLwt.open_callback *
              'ArchiveLwt.read_callback * 'ArchiveLwt.skip_callback *
              '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 -> 'Lwt.t) ->
        ('-> string -> int -> 'Lwt.t) -> ('-> 'Lwt.t) -> '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