functor (M : sig  end->
  sig
    type no_seek
    type seek = private no_seek
    type ('d, 'w) t = ('d, 'w) Iobuf.t
    val invariant :
      'Core_kernel.Invariant_intf.inv ->
      'Core_kernel.Invariant_intf.inv ->
      ('a, 'b) t Core_kernel.Invariant_intf.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