sig
  type 'a filename
  val of_unix_filename :
    OASISUnixPath.unix_filename -> 'OASISFileSystem.filename
  val to_unix_filename :
    'OASISFileSystem.filename -> OASISUnixPath.unix_filename
  class type closer = object method close : unit end
  class type reader =
    object method close : unit method input : Buffer.t -> int -> unit end
  class type writer =
    object method close : unit method output : Buffer.t -> unit end
  class type ['a] fs =
    object
      method file_exists : 'OASISFileSystem.filename -> bool
      method open_in :
        ?mode:Pervasives.open_flag list ->
        ?perm:int -> 'OASISFileSystem.filename -> OASISFileSystem.reader
      method open_out :
        ?mode:Pervasives.open_flag list ->
        ?perm:int -> 'OASISFileSystem.filename -> OASISFileSystem.writer
      method remove : 'OASISFileSystem.filename -> unit
      method string_of_filename : 'OASISFileSystem.filename -> string
    end
  val defer_close : (#OASISFileSystem.closer as 'a) -> ('-> 'b) -> 'b
  val binary_out : Pervasives.open_flag list
  val binary_in : Pervasives.open_flag list
  val stream_of_reader : #OASISFileSystem.reader -> char Stream.t
  val read_all : Buffer.t -> #OASISFileSystem.reader -> unit
  class ['a] host_fs : OASISUnixPath.host_filename -> ['a] fs
end