sig
  module Make :
    functor (M : sig  end->
      sig
        type no_seek
        type seek = private no_seek
        type ('d, 'w) t = ('d, 'w) Iobuf.t
        val invariant :
          'Invariant.inv -> 'Invariant.inv -> ('a, 'b) t Invariant.inv
        val create : len:int -> ('a, 'b) t
        val of_bigstring : ?pos:int -> ?len:int -> Bigstring.t -> ('a, 'b) t
        val of_string : string -> ('a, 'b) t
        val sub : ?pos:int -> ?len:int -> ('d, 'a) t -> ('d, 'b) t
        val capacity : ('a, 'b) t -> int
        val length : ('a, 'b) t -> int
        val is_empty : ('a, 'b) t -> bool
        val narrow : ('a, seek) t -> unit
        module Snapshot :
          sig
            type t
            val restore : t -> ('a, seek) t -> unit
            val sexp_of_t : t -> Sexplib.Sexp.t
          end
        val snapshot : ('a, seek) t -> Snapshot.t
        val advance : ('a, seek) t -> int -> unit
        val resize : ('a, seek) t -> len:int -> unit
        val rewind : ('a, seek) t -> unit
        val reset : ('a, seek) t -> unit
        val flip : ('a, seek) t -> unit
        val compact : (Common.read_write, seek) t -> unit
        val to_string : ?len:int -> ('a, 'b) t -> string
        val consume_into_string :
          ?pos:int -> ?len:int -> ('a, seek) t -> string -> unit
        val consume_into_bigstring :
          ?pos:int -> ?len:int -> ('a, seek) t -> Bigstring.t -> unit
        module Consume :
          sig
            type ('a, 'd, 'w) t = ('d, seek) t -> 'a
            val char : (char, 'd, 'w) t
            val int8 : (int, 'd, 'w) t
            val int16_be : (int, 'd, 'w) t
            val int16_le : (int, 'd, 'w) t
            val int32_be : (int, 'd, 'w) t
            val int32_le : (int, 'd, 'w) t
            val uint8 : (int, 'd, 'w) t
            val uint16_be : (int, 'd, 'w) t
            val uint16_le : (int, 'd, 'w) t
            val uint32_be : (int, 'd, 'w) t
            val uint32_le : (int, 'd, 'w) t
            val int64_be : (int, 'd, 'w) t
            val int64_le : (int, 'd, 'w) t
            val int64_t_be : (Int64.t, 'd, 'w) t
            val int64_t_le : (Int64.t, 'd, 'w) t
            val padded_fixed_string :
              padding:char -> len:int -> (string, 'd, 'w) t
            val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
            val bigstring :
              ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
          end
        module Fill :
          sig
            type ('a, 'd, 'w) t = (Common.read_write, seek) t -> '-> unit
            val char : (char, 'd, 'w) t
            val int8 : (int, 'd, 'w) t
            val int16_be : (int, 'd, 'w) t
            val int16_le : (int, 'd, 'w) t
            val int32_be : (int, 'd, 'w) t
            val int32_le : (int, 'd, 'w) t
            val uint8 : (int, 'd, 'w) t
            val uint16_be : (int, 'd, 'w) t
            val uint16_le : (int, 'd, 'w) t
            val uint32_be : (int, 'd, 'w) t
            val uint32_le : (int, 'd, 'w) t
            val int64_be : (int, 'd, 'w) t
            val int64_le : (int, 'd, 'w) t
            val int64_t_be : (Int64.t, 'd, 'w) t
            val int64_t_le : (Int64.t, 'd, 'w) t
            val padded_fixed_string :
              padding:char -> len:int -> (string, 'd, 'w) t
            val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
            val bigstring :
              ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
          end
        module Peek :
          sig
            type ('a, 'd, 'w) t = ('d, 'w) t -> pos:int -> 'a
            val char : (char, 'd, 'w) t
            val int8 : (int, 'd, 'w) t
            val int16_be : (int, 'd, 'w) t
            val int16_le : (int, 'd, 'w) t
            val int32_be : (int, 'd, 'w) t
            val int32_le : (int, 'd, 'w) t
            val uint8 : (int, 'd, 'w) t
            val uint16_be : (int, 'd, 'w) t
            val uint16_le : (int, 'd, 'w) t
            val uint32_be : (int, 'd, 'w) t
            val uint32_le : (int, 'd, 'w) t
            val int64_be : (int, 'd, 'w) t
            val int64_le : (int, 'd, 'w) t
            val int64_t_be : (Int64.t, 'd, 'w) t
            val int64_t_le : (Int64.t, 'd, 'w) t
            val padded_fixed_string :
              padding:char -> len:int -> (string, 'd, 'w) t
            val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
            val bigstring :
              ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
          end
        module Poke :
          sig
            type ('a, 'd, 'w) t =
                (Common.read_write, 'w) t -> pos:int -> '-> unit
            val char : (char, 'd, 'w) t
            val int8 : (int, 'd, 'w) t
            val int16_be : (int, 'd, 'w) t
            val int16_le : (int, 'd, 'w) t
            val int32_be : (int, 'd, 'w) t
            val int32_le : (int, 'd, 'w) t
            val uint8 : (int, 'd, 'w) t
            val uint16_be : (int, 'd, 'w) t
            val uint16_le : (int, 'd, 'w) t
            val uint32_be : (int, 'd, 'w) t
            val uint32_le : (int, 'd, 'w) t
            val int64_be : (int, 'd, 'w) t
            val int64_le : (int, 'd, 'w) t
            val int64_t_be : (Int64.t, 'd, 'w) t
            val int64_t_le : (Int64.t, 'd, 'w) t
            val padded_fixed_string :
              padding:char -> len:int -> (string, 'd, 'w) t
            val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
            val bigstring :
              ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
          end
        module Unsafe :
          sig
            module Consume :
              sig
                type ('a, 'd, 'w) t = ('d, seek) t -> 'a
                val char : (char, 'd, 'w) t
                val int8 : (int, 'd, 'w) t
                val int16_be : (int, 'd, 'w) t
                val int16_le : (int, 'd, 'w) t
                val int32_be : (int, 'd, 'w) t
                val int32_le : (int, 'd, 'w) t
                val uint8 : (int, 'd, 'w) t
                val uint16_be : (int, 'd, 'w) t
                val uint16_le : (int, 'd, 'w) t
                val uint32_be : (int, 'd, 'w) t
                val uint32_le : (int, 'd, 'w) t
                val int64_be : (int, 'd, 'w) t
                val int64_le : (int, 'd, 'w) t
                val int64_t_be : (Int64.t, 'd, 'w) t
                val int64_t_le : (Int64.t, 'd, 'w) t
                val padded_fixed_string :
                  padding:char -> len:int -> (string, 'd, 'w) t
                val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
                val bigstring :
                  ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
              end
            module Fill :
              sig
                type ('a, 'd, 'w) t =
                    (Common.read_write, seek) t -> '-> unit
                val char : (char, 'd, 'w) t
                val int8 : (int, 'd, 'w) t
                val int16_be : (int, 'd, 'w) t
                val int16_le : (int, 'd, 'w) t
                val int32_be : (int, 'd, 'w) t
                val int32_le : (int, 'd, 'w) t
                val uint8 : (int, 'd, 'w) t
                val uint16_be : (int, 'd, 'w) t
                val uint16_le : (int, 'd, 'w) t
                val uint32_be : (int, 'd, 'w) t
                val uint32_le : (int, 'd, 'w) t
                val int64_be : (int, 'd, 'w) t
                val int64_le : (int, 'd, 'w) t
                val int64_t_be : (Int64.t, 'd, 'w) t
                val int64_t_le : (Int64.t, 'd, 'w) t
                val padded_fixed_string :
                  padding:char -> len:int -> (string, 'd, 'w) t
                val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
                val bigstring :
                  ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
              end
            module Peek :
              sig
                type ('a, 'd, 'w) t = ('d, 'w) t -> pos:int -> 'a
                val char : (char, 'd, 'w) t
                val int8 : (int, 'd, 'w) t
                val int16_be : (int, 'd, 'w) t
                val int16_le : (int, 'd, 'w) t
                val int32_be : (int, 'd, 'w) t
                val int32_le : (int, 'd, 'w) t
                val uint8 : (int, 'd, 'w) t
                val uint16_be : (int, 'd, 'w) t
                val uint16_le : (int, 'd, 'w) t
                val uint32_be : (int, 'd, 'w) t
                val uint32_le : (int, 'd, 'w) t
                val int64_be : (int, 'd, 'w) t
                val int64_le : (int, 'd, 'w) t
                val int64_t_be : (Int64.t, 'd, 'w) t
                val int64_t_le : (Int64.t, 'd, 'w) t
                val padded_fixed_string :
                  padding:char -> len:int -> (string, 'd, 'w) t
                val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
                val bigstring :
                  ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
              end
            module Poke :
              sig
                type ('a, 'd, 'w) t =
                    (Common.read_write, 'w) t -> pos:int -> '-> unit
                val char : (char, 'd, 'w) t
                val int8 : (int, 'd, 'w) t
                val int16_be : (int, 'd, 'w) t
                val int16_le : (int, 'd, 'w) t
                val int32_be : (int, 'd, 'w) t
                val int32_le : (int, 'd, 'w) t
                val uint8 : (int, 'd, 'w) t
                val uint16_be : (int, 'd, 'w) t
                val uint16_le : (int, 'd, 'w) t
                val uint32_be : (int, 'd, 'w) t
                val uint32_le : (int, 'd, 'w) t
                val int64_be : (int, 'd, 'w) t
                val int64_le : (int, 'd, 'w) t
                val int64_t_be : (Int64.t, 'd, 'w) t
                val int64_t_le : (Int64.t, 'd, 'w) t
                val padded_fixed_string :
                  padding:char -> len:int -> (string, 'd, 'w) t
                val string : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
                val bigstring :
                  ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
              end
          end
        val fill_bin_prot :
          (Common.read_write, seek) t ->
          'Bin_prot.Type_class.writer -> '-> unit Or_error.t
        val consume_bin_prot :
          ('b, seek) t -> 'Bin_prot.Type_class.reader -> 'Or_error.t
        val transfer :
          ?len:int ->
          src:('a, seek) t -> dst:(Common.read_write, seek) t -> unit
        val memmove :
          (Common.read_write, 'a) t ->
          src_pos:int -> dst_pos:int -> len:int -> unit
        val read_assume_fd_is_nonblocking :
          (Common.read_write, seek) t -> Iobuf_intf.Unix.File_descr.t -> int
        val pread_assume_fd_is_nonblocking :
          (Common.read_write, seek) t ->
          Iobuf_intf.Unix.File_descr.t -> offset:int -> int
        val recvfrom_assume_fd_is_nonblocking :
          (Common.read_write, seek) t ->
          Iobuf_intf.Unix.File_descr.t -> int * Iobuf_intf.Unix.sockaddr
        val recvmmsg_assume_fd_is_nonblocking :
          (Iobuf_intf.Unix.File_descr.t ->
           ?count:int ->
           ?srcs:Iobuf_intf.Unix.sockaddr array ->
           (Common.read_write, seek) t array -> int)
          Or_error.t
        val send_nonblocking_no_sigpipe :
          unit ->
          (('a, seek) t -> Iobuf_intf.Unix.File_descr.t -> int option)
          Or_error.t
        val sendto_nonblocking_no_sigpipe :
          unit ->
          (('a, seek) t ->
           Iobuf_intf.Unix.File_descr.t ->
           Iobuf_intf.Unix.sockaddr -> int option)
          Or_error.t
        val write_assume_fd_is_nonblocking :
          ('a, seek) t -> Iobuf_intf.Unix.File_descr.t -> int
        val pwrite_assume_fd_is_nonblocking :
          ('a, seek) t -> Iobuf_intf.Unix.File_descr.t -> offset:int -> int
        val sexp_of_no_seek : no_seek -> Sexplib.Sexp.t
        val sexp_of_seek : seek -> Sexplib.Sexp.t
        val sexp_of_t :
          ('data_perm_read_write -> Sexplib.Sexp.t) ->
          ('seek_permission -> Sexplib.Sexp.t) ->
          ('data_perm_read_write, 'seek_permission) t -> Sexplib.Sexp.t
        val check_invariant : bool Pervasives.ref
        val show_messages : bool Pervasives.ref
      end
end