sig
  module Common :
    sig
      type pos = int
      type pos_ref = pos ref
      type buf =
          (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      val create_buf : int -> buf
      val check_pos : buf -> pos -> unit
      val check_next : buf -> pos -> unit
      val safe_get_pos : buf -> pos_ref -> pos
      val blit_string_buf :
        ?src_pos:int -> string -> ?dst_pos:int -> buf -> len:int -> unit
      val blit_buf_string :
        ?src_pos:int -> buf -> ?dst_pos:int -> string -> len:int -> unit
      val blit_buf :
        ?src_pos:int -> src:buf -> ?dst_pos:int -> dst:buf -> int -> unit
      exception Buffer_short
      exception No_variant_match
      module ReadError :
        sig
          type t =
            Bin_prot.Common.ReadError.t =
              Neg_int8
            | Int_code
            | Int_overflow
            | Nat0_code
            | Nat0_overflow
            | Int32_code
            | Int64_code
            | Nativeint_code
            | Unit_code
            | Bool_code
            | Option_code
            | String_too_long
            | Variant_tag
            | Array_too_long
            | Hashtbl_too_long
            | Sum_tag of string
            | Variant of string
            | Poly_rec_bound of string
            | Variant_wrong_type of string
            | Silly_type of string
            | Empty_type of string
          val to_string : t -> string
        end
      exception Read_error of ReadError.t * pos
      exception Read_exc of exn * pos
      exception Poly_rec_write of string
      exception Empty_type of string
      val raise_read_error : ReadError.t -> pos -> 'a
      val raise_read_exc : exn -> pos -> 'a
      val raise_concurrent_modification : string -> 'a
      val array_bound_error : unit -> 'a
      type vec32 =
          (float, Bigarray.float32_elt, Bigarray.fortran_layout)
          Bigarray.Array1.t
      type vec64 =
          (float, Bigarray.float64_elt, Bigarray.fortran_layout)
          Bigarray.Array1.t
      type vec = vec64
      type mat32 =
          (float, Bigarray.float32_elt, Bigarray.fortran_layout)
          Bigarray.Array2.t
      type mat64 =
          (float, Bigarray.float64_elt, Bigarray.fortran_layout)
          Bigarray.Array2.t
      type mat = mat64
      val copy_htbl_list :
        ('a, 'b) Hashtbl.t -> ('a * 'b) list -> ('a, 'b) Hashtbl.t
      external variant_of_int : int -> [>  ] = "%identity"
      external unsafe_blit_buf :
        src_pos:int -> src:buf -> dst_pos:int -> dst:buf -> len:int -> unit
        = "bin_prot_blit_buf_stub"
      external unsafe_blit_string_buf :
        src_pos:int -> string -> dst_pos:int -> buf -> len:int -> unit
        = "bin_prot_blit_string_buf_stub" "noalloc"
      external unsafe_blit_buf_string :
        src_pos:int -> buf -> dst_pos:int -> string -> len:int -> unit
        = "bin_prot_blit_buf_string_stub" "noalloc"
    end
  module Nat0 :
    sig
      type t = Bin_prot.Nat0.t
      val of_int : int -> t
      external unsafe_of_int : int -> t = "%identity"
    end
  module Unsafe_common :
    sig
      type sptr = Bin_prot.Unsafe_common.sptr
      type eptr = Bin_prot.Unsafe_common.eptr
      type sptr_ptr = Bin_prot.Unsafe_common.sptr_ptr
      external get_sptr : Common.buf -> pos:Common.pos -> sptr
        = "get_buf_ptr_stub" "noalloc"
      external get_eptr : Common.buf -> pos:Common.pos -> eptr
        = "get_buf_ptr_stub" "noalloc"
      external shift_sptr : sptr -> int -> sptr = "shift_sptr_stub" "noalloc"
      external get_eptr_from_sptr_ptr : sptr_ptr -> pos:Common.pos -> eptr
        = "get_eptr_from_sptr_ptr" "noalloc"
      external get_buf_pos : start:sptr -> cur:sptr -> Common.pos
        = "get_buf_pos_stub" "noalloc"
      external get_safe_buf_pos :
        Common.buf -> start:sptr -> cur:sptr -> Common.pos
        = "get_safe_buf_pos_stub" "noalloc"
      external alloc_sptr_ptr : Common.buf -> pos:Common.pos -> sptr_ptr
        = "alloc_sptr_ptr_stub" "noalloc"
      external dealloc_sptr_ptr : Common.buf -> sptr_ptr -> Common.pos
        = "dealloc_sptr_ptr_stub" "noalloc"
      external get_sptr_ptr : sptr_ptr -> Common.buf -> Common.pos
        = "get_sptr_ptr_stub" "noalloc"
      external set_sptr_ptr :
        sptr_ptr -> Common.buf -> pos:Common.pos -> unit
        = "set_sptr_ptr_stub" "noalloc"
      external get_sptr_ptr_sptr : sptr_ptr -> sptr
        = "get_sptr_ptr_sptr_stub" "noalloc"
      external set_sptr_ptr_sptr : sptr_ptr -> sptr -> unit
        = "set_sptr_ptr_sptr_stub" "noalloc"
      external get_ptr_string : sptr -> eptr -> string
        = "get_ptr_string_stub"
      val get_read_init :
        Common.buf -> pos_ref:Common.pos ref -> sptr_ptr * eptr
    end
  module Unsafe_read_c :
    sig
      exception Error of Common.ReadError.t
      val raise_variant_wrong_type : string -> 'a
      type 'a reader = Unsafe_common.sptr_ptr -> Unsafe_common.eptr -> 'a
      type ('a, 'b) reader1 = 'a reader -> 'b reader
      type ('a, 'b, 'c) reader2 = 'a reader -> ('b, 'c) reader1
      type ('a, 'b, 'c, 'd) reader3 = 'a reader -> ('b, 'c, 'd) reader2
      val bin_read_unit : unit reader
      val bin_read_bool : bool reader
      val bin_read_string : string reader
      val bin_read_char : char reader
      val bin_read_int : int reader
      val bin_read_float : float reader
      val bin_read_int32 : int32 reader
      val bin_read_int64 : int64 reader
      val bin_read_nativeint : nativeint reader
      val bin_read_nat0 : Nat0.t reader
      val bin_read_ref : ('a, 'a ref) reader1
      val bin_read_lazy : ('a, 'a lazy_t) reader1
      val bin_read_option : ('a, 'a option) reader1
      val bin_read_pair : ('a, 'b, 'a * 'b) reader2
      val bin_read_triple : ('a, 'b, 'c, 'a * 'b * 'c) reader3
      val bin_read_list : ('a, 'a list) reader1
      val bin_read_array : ('a, 'a array) reader1
      val bin_read_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) reader2
      val bin_read_float32_vec : Common.vec32 reader
      val bin_read_float64_vec : Common.vec64 reader
      val bin_read_vec : Common.vec reader
      val bin_read_float32_mat : Common.mat32 reader
      val bin_read_float64_mat : Common.mat64 reader
      val bin_read_mat : Common.mat reader
      val bin_read_bigstring : Common.buf reader
      val bin_read_float_array : float array reader
      val bin_read_variant_int : int reader
      val bin_read_variant_tag : [>  ] reader
      val bin_read_raw_string : (string -> pos:int -> len:int -> unit) reader
      val bin_read_int_8bit : int reader
      val bin_read_int_16bit : int reader
      val bin_read_int_32bit : int reader
      val bin_read_int_64bit : int reader
      val bin_read_int64_bits : int64 reader
      val bin_read_network16_int : int reader
      val bin_read_network32_int : int reader
      val bin_read_network32_int32 : int32 reader
      val bin_read_network64_int : int reader
      val bin_read_network64_int64 : int64 reader
    end
  module Read_ml :
    sig
      type 'a reader = Common.buf -> pos_ref:Common.pos_ref -> 'a
      type ('a, 'b) reader1 = 'a reader -> 'b reader
      type ('a, 'b, 'c) reader2 = 'a reader -> ('b, 'c) reader1
      type ('a, 'b, 'c, 'd) reader3 = 'a reader -> ('b, 'c, 'd) reader2
      val bin_read_unit : unit reader
      val bin_read_bool : bool reader
      val bin_read_string : string reader
      val bin_read_char : char reader
      val bin_read_int : int reader
      val bin_read_nat0 : Nat0.t reader
      val bin_read_float : float reader
      val bin_read_int32 : int32 reader
      val bin_read_int64 : int64 reader
      val bin_read_nativeint : nativeint reader
      val bin_read_ref : ('a, 'a ref) reader1
      val bin_read_lazy : ('a, 'a lazy_t) reader1
      val bin_read_option : ('a, 'a option) reader1
      val bin_read_pair : ('a, 'b, 'a * 'b) reader2
      val bin_read_triple : ('a, 'b, 'c, 'a * 'b * 'c) reader3
      val bin_read_list : ('a, 'a list) reader1
      val bin_read_array : ('a, 'a array) reader1
      val bin_read_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) reader2
      val bin_read_float32_vec : Common.vec32 reader
      val bin_read_float64_vec : Common.vec64 reader
      val bin_read_vec : Common.vec reader
      val bin_read_float32_mat : Common.mat32 reader
      val bin_read_float64_mat : Common.mat64 reader
      val bin_read_mat : Common.mat reader
      val bin_read_bigstring : Common.buf reader
      val bin_read_float_array : float array reader
      val bin_read_variant_int : int reader
      val bin_read_variant_tag : [>  ] reader
      val bin_read_int_8bit : int reader
      val bin_read_int_16bit : int reader
      val bin_read_int_32bit : int reader
      val bin_read_int_64bit : int reader
      val bin_read_int64_bits : int64 reader
      val bin_read_network16_int : int reader
      val bin_read_network32_int : int reader
      val bin_read_network32_int32 : int32 reader
      val bin_read_network64_int : int reader
      val bin_read_network64_int64 : int64 reader
    end
  module Unsafe_write_c :
    sig
      type 'a writer =
          Unsafe_common.sptr ->
          Unsafe_common.eptr -> '-> Unsafe_common.sptr
      type ('a, 'b) writer1 = 'a writer -> 'b writer
      type ('a, 'b, 'c) writer2 = 'a writer -> ('b, 'c) writer1
      type ('a, 'b, 'c, 'd) writer3 = 'a writer -> ('b, 'c, 'd) writer2
      val bin_write_unit : unit writer
      val bin_write_bool : bool writer
      val bin_write_string : string writer
      val bin_write_char : char writer
      val bin_write_int : int writer
      val bin_write_float : float writer
      val bin_write_int32 : int32 writer
      val bin_write_int64 : int64 writer
      val bin_write_nativeint : nativeint writer
      val bin_write_nat0 : Nat0.t writer
      val bin_write_ref : ('a, 'a ref) writer1
      val bin_write_lazy : ('a, 'a lazy_t) writer1
      val bin_write_option : ('a, 'a option) writer1
      val bin_write_pair : ('a, 'b, 'a * 'b) writer2
      val bin_write_triple : ('a, 'b, 'c, 'a * 'b * 'c) writer3
      val bin_write_list : ('a, 'a list) writer1
      val bin_write_array : ('a, 'a array) writer1
      val bin_write_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) writer2
      val bin_write_float32_vec : Common.vec32 writer
      val bin_write_float64_vec : Common.vec64 writer
      val bin_write_vec : Common.vec writer
      val bin_write_float32_mat : Common.mat32 writer
      val bin_write_float64_mat : Common.mat64 writer
      val bin_write_mat : Common.mat writer
      val bin_write_bigstring : Common.buf writer
      val bin_write_float_array : float array writer
      val bin_write_variant_tag : [>  ] writer
      val bin_write_raw_string :
        Unsafe_common.sptr ->
        Unsafe_common.eptr ->
        string -> pos:int -> len:int -> Unsafe_common.sptr
      val bin_write_int_8bit : int writer
      val bin_write_int_16bit : int writer
      val bin_write_int_32bit : int writer
      val bin_write_int_64bit : int writer
      val bin_write_int64_bits : int64 writer
      val bin_write_network16_int : int writer
      val bin_write_network32_int : int writer
      val bin_write_network32_int32 : int32 writer
      val bin_write_network64_int : int writer
      val bin_write_network64_int64 : int64 writer
      val bin_write_array_no_length : ('a, 'a array) writer1
    end
  module Write_ml :
    sig
      type 'a writer = Common.buf -> pos:Common.pos -> '-> Common.pos
      type ('a, 'b) writer1 = 'a writer -> 'b writer
      type ('a, 'b, 'c) writer2 = 'a writer -> ('b, 'c) writer1
      type ('a, 'b, 'c, 'd) writer3 = 'a writer -> ('b, 'c, 'd) writer2
      val bin_write_unit : unit writer
      val bin_write_bool : bool writer
      val bin_write_string : string writer
      val bin_write_char : char writer
      val bin_write_int : int writer
      val bin_write_nat0 : Nat0.t writer
      val bin_write_float : float writer
      val bin_write_int32 : int32 writer
      val bin_write_int64 : int64 writer
      val bin_write_nativeint : nativeint writer
      val bin_write_ref : ('a, 'a ref) writer1
      val bin_write_lazy : ('a, 'a lazy_t) writer1
      val bin_write_option : ('a, 'a option) writer1
      val bin_write_pair : ('a, 'b, 'a * 'b) writer2
      val bin_write_triple : ('a, 'b, 'c, 'a * 'b * 'c) writer3
      val bin_write_list : ('a, 'a list) writer1
      val bin_write_array : ('a, 'a array) writer1
      val bin_write_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) writer2
      val bin_write_float32_vec : Common.vec32 writer
      val bin_write_float64_vec : Common.vec64 writer
      val bin_write_vec : Common.vec writer
      val bin_write_float32_mat : Common.mat32 writer
      val bin_write_float64_mat : Common.mat64 writer
      val bin_write_mat : Common.mat writer
      val bin_write_bigstring : Common.buf writer
      val bin_write_float_array : float array writer
      val bin_write_variant_tag : [>  ] writer
      val bin_write_int_8bit : int writer
      val bin_write_int_16bit : int writer
      val bin_write_int_32bit : int writer
      val bin_write_int_64bit : int writer
      val bin_write_int64_bits : int64 writer
      val bin_write_network16_int : int writer
      val bin_write_network32_int : int writer
      val bin_write_network32_int32 : int32 writer
      val bin_write_network64_int : int writer
      val bin_write_network64_int64 : int64 writer
      val bin_write_array_no_length : ('a, 'a array) writer1
    end
  module Map_to_safe :
    sig
      type 'a reader = 'Read_ml.reader
      type ('a, 'b) reader1 = 'Unsafe_read_c.reader -> 'Read_ml.reader
      type ('a, 'b, 'c) reader2 = 'Unsafe_read_c.reader -> ('b, 'c) reader1
      type ('a, 'b, 'c, 'd) reader3 =
          'Unsafe_read_c.reader -> ('b, 'c, 'd) reader2
      type 'a writer = 'Write_ml.writer
      type ('a, 'b) writer1 = 'Unsafe_write_c.writer -> 'Write_ml.writer
      type ('a, 'b, 'c) writer2 =
          'Unsafe_write_c.writer -> ('b, 'c) writer1
      type ('a, 'b, 'c, 'd) writer3 =
          'Unsafe_write_c.writer -> ('b, 'c, 'd) writer2
    end
  module Size :
    sig
      type 'a sizer = '-> int
      type ('a, 'b) sizer1 = 'a sizer -> 'b sizer
      type ('a, 'b, 'c) sizer2 = 'a sizer -> ('b, 'c) sizer1
      type ('a, 'b, 'c, 'd) sizer3 = 'a sizer -> ('b, 'c, 'd) sizer2
      val bin_size_unit : unit sizer
      val bin_size_bool : bool sizer
      val bin_size_string : string sizer
      val bin_size_char : char sizer
      val bin_size_int : int sizer
      val bin_size_float : float sizer
      val bin_size_int32 : int32 sizer
      val bin_size_int64 : int64 sizer
      val bin_size_nativeint : nativeint sizer
      val bin_size_nat0 : Nat0.t sizer
      val bin_size_ref : ('a, 'a ref) sizer1
      val bin_size_lazy_t : ('a, 'a lazy_t) sizer1
      val bin_size_lazy : ('a, 'a lazy_t) sizer1
      val bin_size_option : ('a, 'a option) sizer1
      val bin_size_pair : ('a, 'b, 'a * 'b) sizer2
      val bin_size_triple : ('a, 'b, 'c, 'a * 'b * 'c) sizer3
      val bin_size_list : ('a, 'a list) sizer1
      val bin_size_array : ('a, 'a array) sizer1
      val bin_size_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) sizer2
      val bin_size_float32_vec : Common.vec32 sizer
      val bin_size_float64_vec : Common.vec64 sizer
      val bin_size_vec : Common.vec sizer
      val bin_size_float32_mat : Common.mat32 sizer
      val bin_size_float64_mat : Common.mat64 sizer
      val bin_size_mat : Common.mat sizer
      val bin_size_bigstring : Common.buf sizer
      val bin_size_float_array : float array sizer
      val bin_size_variant_tag : [>  ] sizer
      val bin_size_int_8bit : int sizer
      val bin_size_int_16bit : int sizer
      val bin_size_int_32bit : int sizer
      val bin_size_int_64bit : int sizer
      val bin_size_int64_bits : int64 sizer
      val bin_size_network16_int : int sizer
      val bin_size_network32_int : int sizer
      val bin_size_network32_int32 : int32 sizer
      val bin_size_network64_int : int sizer
      val bin_size_network64_int64 : int64 sizer
      val bin_size_array_no_length : ('a, 'a array) sizer1
    end
  module Type_class :
    sig
      type 'a writer =
        'Bin_prot.Type_class.writer = {
        size : 'Size.sizer;
        write : 'Write_ml.writer;
        unsafe_write : 'Unsafe_write_c.writer;
      }
      type 'a reader =
        'Bin_prot.Type_class.reader = {
        read : 'Read_ml.reader;
        unsafe_read : 'Unsafe_read_c.reader;
        unsafe_vtag_read : (int -> 'a) Unsafe_read_c.reader;
      }
      type 'a t =
        'Bin_prot.Type_class.t = {
        writer : 'a writer;
        reader : 'a reader;
      }
      type 'a writer0 = 'a writer
      type 'a reader0 = 'a reader
      type 'a t0 = 'a t
      module S1 :
        sig
          type ('a, 'b) writer = 'a writer0 -> 'b writer0
          type ('a, 'b) reader = 'a reader0 -> 'b reader0
          type ('a, 'b) t = 'a t0 -> 'b t0
        end
      module S2 :
        sig
          type ('a, 'b, 'c) writer = 'a writer0 -> ('b, 'c) S1.writer
          type ('a, 'b, 'c) reader = 'a reader0 -> ('b, 'c) S1.reader
          type ('a, 'b, 'c) t = 'a t0 -> ('b, 'c) S1.t
        end
      module S3 :
        sig
          type ('a, 'b, 'c, 'd) writer = 'a writer0 -> ('b, 'c, 'd) S2.writer
          type ('a, 'b, 'c, 'd) reader = 'a reader0 -> ('b, 'c, 'd) S2.reader
          type ('a, 'b, 'c, 'd) t = 'a t0 -> ('b, 'c, 'd) S2.t
        end
      val bin_writer_unit : unit writer
      val bin_reader_unit : unit reader
      val bin_unit : unit t
      val bin_writer_bool : bool writer
      val bin_reader_bool : bool reader
      val bin_bool : bool t
      val bin_writer_string : string writer
      val bin_reader_string : string reader
      val bin_string : string t
      val bin_writer_char : char writer
      val bin_reader_char : char reader
      val bin_char : char t
      val bin_writer_int : int writer
      val bin_reader_int : int reader
      val bin_int : int t
      val bin_writer_float : float writer
      val bin_reader_float : float reader
      val bin_float : float t
      val bin_writer_int32 : int32 writer
      val bin_reader_int32 : int32 reader
      val bin_int32 : int32 t
      val bin_writer_int64 : int64 writer
      val bin_reader_int64 : int64 reader
      val bin_int64 : int64 t
      val bin_writer_nativeint : nativeint writer
      val bin_reader_nativeint : nativeint reader
      val bin_nativeint : nativeint t
      val bin_writer_nat0 : Nat0.t writer
      val bin_reader_nat0 : Nat0.t reader
      val bin_nat0 : Nat0.t t
      val bin_writer_ref : ('a, 'a ref) S1.writer
      val bin_reader_ref : ('a, 'a ref) S1.reader
      val bin_ref : ('a, 'a ref) S1.t
      val bin_writer_lazy : ('a, 'a lazy_t) S1.writer
      val bin_reader_lazy : ('a, 'a lazy_t) S1.reader
      val bin_lazy : ('a, 'a lazy_t) S1.t
      val bin_writer_option : ('a, 'a option) S1.writer
      val bin_reader_option : ('a, 'a option) S1.reader
      val bin_option : ('a, 'a option) S1.t
      val bin_writer_pair : ('a, 'b, 'a * 'b) S2.writer
      val bin_reader_pair : ('a, 'b, 'a * 'b) S2.reader
      val bin_pair : ('a, 'b, 'a * 'b) S2.t
      val bin_writer_triple : ('a, 'b, 'c, 'a * 'b * 'c) S3.writer
      val bin_reader_triple : ('a, 'b, 'c, 'a * 'b * 'c) S3.reader
      val bin_triple : ('a, 'b, 'c, 'a * 'b * 'c) S3.t
      val bin_writer_list : ('a, 'a list) S1.writer
      val bin_reader_list : ('a, 'a list) S1.reader
      val bin_list : ('a, 'a list) S1.t
      val bin_writer_array : ('a, 'a array) S1.writer
      val bin_reader_array : ('a, 'a array) S1.reader
      val bin_array : ('a, 'a array) S1.t
      val bin_writer_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) S2.writer
      val bin_reader_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) S2.reader
      val bin_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) S2.t
      val bin_writer_float32_vec : Common.vec32 writer
      val bin_reader_float32_vec : Common.vec32 reader
      val bin_float32_vec : Common.vec32 t
      val bin_writer_float64_vec : Common.vec64 writer
      val bin_reader_float64_vec : Common.vec64 reader
      val bin_float64_vec : Common.vec64 t
      val bin_writer_vec : Common.vec writer
      val bin_reader_vec : Common.vec reader
      val bin_vec : Common.vec t
      val bin_writer_float32_mat : Common.mat32 writer
      val bin_reader_float32_mat : Common.mat32 reader
      val bin_float32_mat : Common.mat32 t
      val bin_writer_float64_mat : Common.mat64 writer
      val bin_reader_float64_mat : Common.mat64 reader
      val bin_float64_mat : Common.mat64 t
      val bin_writer_mat : Common.mat writer
      val bin_reader_mat : Common.mat reader
      val bin_mat : Common.mat t
      val bin_writer_bigstring : Common.buf writer
      val bin_reader_bigstring : Common.buf reader
      val bin_bigstring : Common.buf t
      val bin_writer_float_array : float array writer
      val bin_reader_float_array : float array reader
      val bin_float_array : float array t
      val bin_writer_variant_tag : [>  ] writer
      val bin_reader_variant_tag : [>  ] reader
      val bin_variant_tag : [>  ] t
      val bin_writer_int_8bit : int writer
      val bin_reader_int_8bit : int reader
      val bin_int_8bit : int t
      val bin_writer_int_16bit : int writer
      val bin_reader_int_16bit : int reader
      val bin_int_16bit : int t
      val bin_writer_int_32bit : int writer
      val bin_reader_int_32bit : int reader
      val bin_int_32bit : int t
      val bin_writer_int_64bit : int writer
      val bin_reader_int_64bit : int reader
      val bin_int_64bit : int t
      val bin_writer_int64_bits : int64 writer
      val bin_reader_int64_bits : int64 reader
      val bin_int64_bits : int64 t
      val bin_writer_network16_int : int writer
      val bin_reader_network16_int : int reader
      val bin_network16_int : int t
      val bin_writer_network32_int : int writer
      val bin_reader_network32_int : int reader
      val bin_network32_int : int t
      val bin_writer_network32_int32 : int32 writer
      val bin_reader_network32_int32 : int32 reader
      val bin_network32_int32 : int32 t
      val bin_writer_network64_int : int writer
      val bin_reader_network64_int : int reader
      val bin_network64_int : int t
      val bin_writer_network64_int64 : int64 writer
      val bin_reader_network64_int64 : int64 reader
      val bin_network64_int64 : int64 t
      val bin_writer_array_no_length : ('a, 'a array) S1.writer
      val cnv_writer : ('-> 'b) -> 'b writer -> 'a writer
      val cnv_reader : ('-> 'a) -> 'b reader -> 'a reader
      val cnv : ('-> 'b) -> ('-> 'a) -> 'b t -> 'a t
    end
  module Binable :
    sig
      module type S =
        sig
          type t
          val bin_size_t : t Size.sizer
          val bin_write_t : t Map_to_safe.writer
          val bin_write_t_ : t Unsafe_write_c.writer
          val bin_read_t : t Read_ml.reader
          val bin_read_t_ : t Unsafe_read_c.reader
          val bin_read_t__ : (int -> t) Unsafe_read_c.reader
          val bin_writer_t : t Type_class.writer
          val bin_reader_t : t Type_class.reader
          val bin_t : t Type_class.t
        end
      module type S1 =
        sig
          type 'a t
          val bin_size_t : ('a, 'a t) Size.sizer1
          val bin_write_t : ('a, 'a t) Map_to_safe.writer1
          val bin_write_t_ : ('a, 'a t) Unsafe_write_c.writer1
          val bin_read_t : ('a, 'a t) Map_to_safe.reader1
          val bin_read_t_ : ('a, 'a t) Unsafe_read_c.reader1
          val bin_read_t__ : ('a, int -> 'a t) Unsafe_read_c.reader1
          val bin_writer_t : ('a, 'a t) Type_class.S1.writer
          val bin_reader_t : ('a, 'a t) Type_class.S1.reader
          val bin_t : ('a, 'a t) Type_class.S1.t
        end
      module type S2 =
        sig
          type ('a, 'b) t
          val bin_size_t : ('a, 'b, ('a, 'b) t) Size.sizer2
          val bin_write_t : ('a, 'b, ('a, 'b) t) Map_to_safe.writer2
          val bin_write_t_ : ('a, 'b, ('a, 'b) t) Unsafe_write_c.writer2
          val bin_read_t : ('a, 'b, ('a, 'b) t) Map_to_safe.reader2
          val bin_read_t_ : ('a, 'b, ('a, 'b) t) Unsafe_read_c.reader2
          val bin_read_t__ :
            ('a, 'b, int -> ('a, 'b) t) Unsafe_read_c.reader2
          val bin_writer_t : ('a, 'b, ('a, 'b) t) Type_class.S2.writer
          val bin_reader_t : ('a, 'b, ('a, 'b) t) Type_class.S2.reader
          val bin_t : ('a, 'b, ('a, 'b) t) Type_class.S2.t
        end
    end
  module Write_c :
    sig
      val unsafe_get_init :
        Common.buf ->
        pos:Common.pos ->
        Unsafe_common.sptr * Unsafe_common.sptr * Unsafe_common.eptr
      val make : 'Unsafe_write_c.writer -> 'Write_ml.writer
      val make1 :
        ('a, 'b) Unsafe_write_c.writer1 -> ('a, 'b) Write_ml.writer1
      val make2 :
        ('a, 'b, 'c) Unsafe_write_c.writer2 -> ('a, 'b, 'c) Write_ml.writer2
      val make3 :
        ('a, 'b, 'c, 'd) Unsafe_write_c.writer3 ->
        ('a, 'b, 'c, 'd) Write_ml.writer3
      val unmake :
        'Write_ml.writer ->
        Common.buf -> start:Unsafe_common.sptr -> 'Unsafe_write_c.writer
      val bin_write_unit : unit Write_ml.writer
      val bin_write_bool : bool Write_ml.writer
      val bin_write_string : string Write_ml.writer
      val bin_write_char : char Write_ml.writer
      val bin_write_int : int Write_ml.writer
      val bin_write_nat0 : Nat0.t Write_ml.writer
      val bin_write_float : float Write_ml.writer
      val bin_write_int32 : int32 Write_ml.writer
      val bin_write_int64 : int64 Write_ml.writer
      val bin_write_nativeint : nativeint Write_ml.writer
      val bin_write_ref : ('a, 'a ref) Write_ml.writer1
      val bin_write_lazy : ('a, 'a lazy_t) Write_ml.writer1
      val bin_write_option : ('a, 'a option) Write_ml.writer1
      val bin_write_pair : ('a, 'b, 'a * 'b) Write_ml.writer2
      val bin_write_triple : ('a, 'b, 'c, 'a * 'b * 'c) Write_ml.writer3
      val bin_write_list : ('a, 'a list) Write_ml.writer1
      val bin_write_array : ('a, 'a array) Write_ml.writer1
      val bin_write_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Write_ml.writer2
      val bin_write_float32_vec : Common.vec32 Write_ml.writer
      val bin_write_float64_vec : Common.vec64 Write_ml.writer
      val bin_write_vec : Common.vec Write_ml.writer
      val bin_write_float32_mat : Common.mat32 Write_ml.writer
      val bin_write_float64_mat : Common.mat64 Write_ml.writer
      val bin_write_mat : Common.mat Write_ml.writer
      val bin_write_bigstring : Common.buf Write_ml.writer
      val bin_write_float_array : float array Write_ml.writer
      val bin_write_variant_tag : [>  ] Write_ml.writer
      val bin_write_array_no_length : ('a, 'a array) Write_ml.writer1
      val bin_write_int_64bit : int Write_ml.writer
      val bin_write_int64_bits : int64 Write_ml.writer
      val bin_write_network16_int : int Write_ml.writer
      val bin_write_network32_int : int Write_ml.writer
      val bin_write_network32_int32 : int32 Write_ml.writer
      val bin_write_network64_int : int Write_ml.writer
      val bin_write_network64_int64 : int64 Write_ml.writer
    end
  module Read_c :
    sig
      val make : 'Unsafe_read_c.reader -> 'Read_ml.reader
      val make1 : ('a, 'b) Unsafe_read_c.reader1 -> ('a, 'b) Read_ml.reader1
      val make2 :
        ('a, 'b, 'c) Unsafe_read_c.reader2 -> ('a, 'b, 'c) Read_ml.reader2
      val make3 :
        ('a, 'b, 'c, 'd) Unsafe_read_c.reader3 ->
        ('a, 'b, 'c, 'd) Read_ml.reader3
      val unmake : 'Read_ml.reader -> Common.buf -> 'Unsafe_read_c.reader
      val handle_error :
        Common.buf -> Unsafe_common.sptr_ptr -> Common.ReadError.t -> 'a
      val handle_exc : Common.buf -> Unsafe_common.sptr_ptr -> exn -> 'a
      val at_end :
        Common.buf -> Unsafe_common.sptr_ptr -> Common.pos_ref -> '-> 'a
      val bin_read_unit : unit Read_ml.reader
      val bin_read_bool : bool Read_ml.reader
      val bin_read_string : string Read_ml.reader
      val bin_read_char : char Read_ml.reader
      val bin_read_int : int Read_ml.reader
      val bin_read_nat0 : Nat0.t Read_ml.reader
      val bin_read_float : float Read_ml.reader
      val bin_read_int32 : int32 Read_ml.reader
      val bin_read_int64 : int64 Read_ml.reader
      val bin_read_nativeint : nativeint Read_ml.reader
      val bin_read_ref : ('a, 'a ref) Read_ml.reader1
      val bin_read_lazy : ('a, 'a lazy_t) Read_ml.reader1
      val bin_read_option : ('a, 'a option) Read_ml.reader1
      val bin_read_pair : ('a, 'b, 'a * 'b) Read_ml.reader2
      val bin_read_triple : ('a, 'b, 'c, 'a * 'b * 'c) Read_ml.reader3
      val bin_read_list : ('a, 'a list) Read_ml.reader1
      val bin_read_array : ('a, 'a array) Read_ml.reader1
      val bin_read_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Read_ml.reader2
      val bin_read_float32_vec : Common.vec32 Read_ml.reader
      val bin_read_float64_vec : Common.vec64 Read_ml.reader
      val bin_read_vec : Common.vec Read_ml.reader
      val bin_read_float32_mat : Common.mat32 Read_ml.reader
      val bin_read_float64_mat : Common.mat64 Read_ml.reader
      val bin_read_mat : Common.mat Read_ml.reader
      val bin_read_bigstring : Common.buf Read_ml.reader
      val bin_read_float_array : float array Read_ml.reader
      val bin_read_variant_int : int Read_ml.reader
      val bin_read_variant_tag : [>  ] Read_ml.reader
      val bin_read_int_64bit : int Read_ml.reader
      val bin_read_int64_bits : int64 Read_ml.reader
      val bin_read_network16_int : int Read_ml.reader
      val bin_read_network32_int : int Read_ml.reader
      val bin_read_network32_int32 : int32 Read_ml.reader
      val bin_read_network64_int : int Read_ml.reader
      val bin_read_network64_int64 : int64 Read_ml.reader
    end
  module Std :
    sig
      type 'a sizer = '-> int
      type ('a, 'b) sizer1 = 'a sizer -> 'b sizer
      type ('a, 'b, 'c) sizer2 = 'a sizer -> ('b, 'c) sizer1
      type ('a, 'b, 'c, 'd) sizer3 = 'a sizer -> ('b, 'c, 'd) sizer2
      val bin_size_unit : unit sizer
      val bin_size_bool : bool sizer
      val bin_size_string : string sizer
      val bin_size_char : char sizer
      val bin_size_int : int sizer
      val bin_size_float : float sizer
      val bin_size_int32 : int32 sizer
      val bin_size_int64 : int64 sizer
      val bin_size_nativeint : nativeint sizer
      val bin_size_nat0 : Nat0.t sizer
      val bin_size_ref : ('a, 'a ref) sizer1
      val bin_size_lazy_t : ('a, 'a lazy_t) sizer1
      val bin_size_lazy : ('a, 'a lazy_t) sizer1
      val bin_size_option : ('a, 'a option) sizer1
      val bin_size_pair : ('a, 'b, 'a * 'b) sizer2
      val bin_size_triple : ('a, 'b, 'c, 'a * 'b * 'c) sizer3
      val bin_size_list : ('a, 'a list) sizer1
      val bin_size_array : ('a, 'a array) sizer1
      val bin_size_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) sizer2
      val bin_size_float32_vec : Common.vec32 sizer
      val bin_size_float64_vec : Common.vec64 sizer
      val bin_size_vec : Common.vec sizer
      val bin_size_float32_mat : Common.mat32 sizer
      val bin_size_float64_mat : Common.mat64 sizer
      val bin_size_mat : Common.mat sizer
      val bin_size_bigstring : Common.buf sizer
      val bin_size_float_array : float array sizer
      val bin_size_variant_tag : [>  ] sizer
      val bin_size_int_8bit : int sizer
      val bin_size_int_16bit : int sizer
      val bin_size_int_32bit : int sizer
      val bin_size_int_64bit : int sizer
      val bin_size_int64_bits : int64 sizer
      val bin_size_network16_int : int sizer
      val bin_size_network32_int : int sizer
      val bin_size_network32_int32 : int32 sizer
      val bin_size_network64_int : int sizer
      val bin_size_network64_int64 : int64 sizer
      val bin_size_array_no_length : ('a, 'a array) sizer1
      val bin_unit : unit Type_class.t
      val bin_writer_unit : unit Type_class.writer
      val bin_write_unit_ : unit Unsafe_write_c.writer
      val bin_write_unit : unit Write_ml.writer
      val bin_reader_unit : unit Type_class.reader
      val bin_read_unit : unit Read_ml.reader
      val bin_read_unit_ : unit Unsafe_read_c.reader
      val bin_read_unit__ : '-> '-> '-> 'd
      val bin_bool : bool Type_class.t
      val bin_writer_bool : bool Type_class.writer
      val bin_write_bool_ : bool Unsafe_write_c.writer
      val bin_write_bool : bool Write_ml.writer
      val bin_reader_bool : bool Type_class.reader
      val bin_read_bool : bool Read_ml.reader
      val bin_read_bool_ : bool Unsafe_read_c.reader
      val bin_read_bool__ : '-> '-> '-> 'd
      val bin_string : string Type_class.t
      val bin_writer_string : string Type_class.writer
      val bin_write_string_ : string Unsafe_write_c.writer
      val bin_write_string : string Write_ml.writer
      val bin_reader_string : string Type_class.reader
      val bin_read_string : string Read_ml.reader
      val bin_read_string_ : string Unsafe_read_c.reader
      val bin_read_string__ : '-> '-> '-> 'd
      val bin_char : char Type_class.t
      val bin_writer_char : char Type_class.writer
      val bin_write_char_ : char Unsafe_write_c.writer
      val bin_write_char : char Write_ml.writer
      val bin_reader_char : char Type_class.reader
      val bin_read_char : char Read_ml.reader
      val bin_read_char_ : char Unsafe_read_c.reader
      val bin_read_char__ : '-> '-> '-> 'd
      val bin_int : int Type_class.t
      val bin_writer_int : int Type_class.writer
      val bin_write_int_ : int Unsafe_write_c.writer
      val bin_write_int : int Write_ml.writer
      val bin_reader_int : int Type_class.reader
      val bin_read_int : int Read_ml.reader
      val bin_read_int_ : int Unsafe_read_c.reader
      val bin_read_int__ : '-> '-> '-> 'd
      val bin_float : float Type_class.t
      val bin_writer_float : float Type_class.writer
      val bin_write_float_ : float Unsafe_write_c.writer
      val bin_write_float : float Write_ml.writer
      val bin_reader_float : float Type_class.reader
      val bin_read_float : float Read_ml.reader
      val bin_read_float_ : float Unsafe_read_c.reader
      val bin_read_float__ : '-> '-> '-> 'd
      val bin_int32 : int32 Type_class.t
      val bin_writer_int32 : int32 Type_class.writer
      val bin_write_int32_ : int32 Unsafe_write_c.writer
      val bin_write_int32 : int32 Write_ml.writer
      val bin_reader_int32 : int32 Type_class.reader
      val bin_read_int32 : int32 Read_ml.reader
      val bin_read_int32_ : int32 Unsafe_read_c.reader
      val bin_read_int32__ : '-> '-> '-> 'd
      val bin_int64 : int64 Type_class.t
      val bin_writer_int64 : int64 Type_class.writer
      val bin_write_int64_ : int64 Unsafe_write_c.writer
      val bin_write_int64 : int64 Write_ml.writer
      val bin_reader_int64 : int64 Type_class.reader
      val bin_read_int64 : int64 Read_ml.reader
      val bin_read_int64_ : int64 Unsafe_read_c.reader
      val bin_read_int64__ : '-> '-> '-> 'd
      val bin_nativeint : nativeint Type_class.t
      val bin_writer_nativeint : nativeint Type_class.writer
      val bin_write_nativeint_ : nativeint Unsafe_write_c.writer
      val bin_write_nativeint : nativeint Write_ml.writer
      val bin_reader_nativeint : nativeint Type_class.reader
      val bin_read_nativeint : nativeint Read_ml.reader
      val bin_read_nativeint_ : nativeint Unsafe_read_c.reader
      val bin_read_nativeint__ : '-> '-> '-> 'd
      val bin_ref : ('a, 'a ref) Type_class.S1.t
      val bin_writer_ref : ('a, 'a ref) Type_class.S1.writer
      val bin_write_ref_ : ('a, 'a ref) Unsafe_write_c.writer1
      val bin_write_ref : ('a, 'a ref) Write_ml.writer1
      val bin_reader_ref : ('a, 'a ref) Type_class.S1.reader
      val bin_read_ref : ('a, 'a ref) Read_ml.reader1
      val bin_read_ref_ : ('a, 'a ref) Unsafe_read_c.reader1
      val bin_read_ref__ : '-> '-> '-> '-> 'e
      val bin_lazy_t : ('a, 'a lazy_t) Type_class.S1.t
      val bin_writer_lazy_t : ('a, 'a lazy_t) Type_class.S1.writer
      val bin_write_lazy_t_ : ('a, 'a lazy_t) Unsafe_write_c.writer1
      val bin_write_lazy_t : ('a, 'a lazy_t) Write_ml.writer1
      val bin_reader_lazy_t : ('a, 'a lazy_t) Type_class.S1.reader
      val bin_read_lazy_t : ('a, 'a lazy_t) Read_ml.reader1
      val bin_read_lazy_t_ : ('a, 'a lazy_t) Unsafe_read_c.reader1
      val bin_read_lazy_t__ : '-> '-> '-> '-> 'e
      val bin_lazy : ('a, 'a lazy_t) Type_class.S1.t
      val bin_writer_lazy : ('a, 'a lazy_t) Type_class.S1.writer
      val bin_write_lazy_ : ('a, 'a lazy_t) Unsafe_write_c.writer1
      val bin_write_lazy : ('a, 'a lazy_t) Write_ml.writer1
      val bin_reader_lazy : ('a, 'a lazy_t) Type_class.S1.reader
      val bin_read_lazy : ('a, 'a lazy_t) Read_ml.reader1
      val bin_read_lazy_ : ('a, 'a lazy_t) Unsafe_read_c.reader1
      val bin_read_lazy__ : '-> '-> '-> '-> 'e
      val bin_option : ('a, 'a option) Type_class.S1.t
      val bin_writer_option : ('a, 'a option) Type_class.S1.writer
      val bin_write_option_ : ('a, 'a option) Unsafe_write_c.writer1
      val bin_write_option : ('a, 'a option) Write_ml.writer1
      val bin_reader_option : ('a, 'a option) Type_class.S1.reader
      val bin_read_option : ('a, 'a option) Read_ml.reader1
      val bin_read_option_ : ('a, 'a option) Unsafe_read_c.reader1
      val bin_read_option__ : '-> '-> '-> '-> 'e
      val bin_list : ('a, 'a list) Type_class.S1.t
      val bin_writer_list : ('a, 'a list) Type_class.S1.writer
      val bin_write_list_ : ('a, 'a list) Unsafe_write_c.writer1
      val bin_write_list : ('a, 'a list) Write_ml.writer1
      val bin_reader_list : ('a, 'a list) Type_class.S1.reader
      val bin_read_list : ('a, 'a list) Read_ml.reader1
      val bin_read_list_ : ('a, 'a list) Unsafe_read_c.reader1
      val bin_read_list__ : '-> '-> '-> '-> 'e
      val bin_array : ('a, 'a array) Type_class.S1.t
      val bin_writer_array : ('a, 'a array) Type_class.S1.writer
      val bin_write_array_ : ('a, 'a array) Unsafe_write_c.writer1
      val bin_write_array : ('a, 'a array) Write_ml.writer1
      val bin_reader_array : ('a, 'a array) Type_class.S1.reader
      val bin_read_array : ('a, 'a array) Read_ml.reader1
      val bin_read_array_ : ('a, 'a array) Unsafe_read_c.reader1
      val bin_read_array__ : '-> '-> '-> '-> 'e
      val bin_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.t
      val bin_writer_hashtbl :
        ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.writer
      val bin_write_hashtbl_ :
        ('a, 'b, ('a, 'b) Hashtbl.t) Unsafe_write_c.writer2
      val bin_write_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Write_ml.writer2
      val bin_reader_hashtbl :
        ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.reader
      val bin_read_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Read_ml.reader2
      val bin_read_hashtbl_ :
        ('a, 'b, ('a, 'b) Hashtbl.t) Unsafe_read_c.reader2
      val bin_read_hashtbl__ : '-> '-> '-> '-> '-> 'f
      val bin_bigstring : Common.buf Type_class.t
      val bin_writer_bigstring : Common.buf Type_class.writer
      val bin_write_bigstring_ : Common.buf Unsafe_write_c.writer
      val bin_write_bigstring : Common.buf Write_ml.writer
      val bin_reader_bigstring : Common.buf Type_class.reader
      val bin_read_bigstring : Common.buf Read_ml.reader
      val bin_read_bigstring_ : Common.buf Unsafe_read_c.reader
      val bin_read_bigstring__ : '-> '-> '-> 'd
      val bin_mat : Common.mat Type_class.t
      val bin_writer_mat : Common.mat Type_class.writer
      val bin_write_mat_ : Common.mat Unsafe_write_c.writer
      val bin_write_mat : Common.mat Write_ml.writer
      val bin_reader_mat : Common.mat Type_class.reader
      val bin_read_mat : Common.mat Read_ml.reader
      val bin_read_mat_ : Common.mat Unsafe_read_c.reader
      val bin_read_mat__ : '-> '-> '-> 'd
      val bin_float32_mat : Common.mat32 Type_class.t
      val bin_writer_float32_mat : Common.mat32 Type_class.writer
      val bin_write_float32_mat_ : Common.mat32 Unsafe_write_c.writer
      val bin_write_float32_mat : Common.mat32 Write_ml.writer
      val bin_reader_float32_mat : Common.mat32 Type_class.reader
      val bin_read_float32_mat : Common.mat32 Read_ml.reader
      val bin_read_float32_mat_ : Common.mat32 Unsafe_read_c.reader
      val bin_read_float32_mat__ : '-> '-> '-> 'd
      val bin_float64_mat : Common.mat64 Type_class.t
      val bin_writer_float64_mat : Common.mat64 Type_class.writer
      val bin_write_float64_mat_ : Common.mat64 Unsafe_write_c.writer
      val bin_write_float64_mat : Common.mat64 Write_ml.writer
      val bin_reader_float64_mat : Common.mat64 Type_class.reader
      val bin_read_float64_mat : Common.mat64 Read_ml.reader
      val bin_read_float64_mat_ : Common.mat64 Unsafe_read_c.reader
      val bin_read_float64_mat__ : '-> '-> '-> 'd
      val bin_vec : Common.vec Type_class.t
      val bin_writer_vec : Common.vec Type_class.writer
      val bin_write_vec_ : Common.vec Unsafe_write_c.writer
      val bin_write_vec : Common.vec Write_ml.writer
      val bin_reader_vec : Common.vec Type_class.reader
      val bin_read_vec : Common.vec Read_ml.reader
      val bin_read_vec_ : Common.vec Unsafe_read_c.reader
      val bin_read_vec__ : '-> '-> '-> 'd
      val bin_float32_vec : Common.vec32 Type_class.t
      val bin_writer_float32_vec : Common.vec32 Type_class.writer
      val bin_write_float32_vec_ : Common.vec32 Unsafe_write_c.writer
      val bin_write_float32_vec : Common.vec32 Write_ml.writer
      val bin_reader_float32_vec : Common.vec32 Type_class.reader
      val bin_read_float32_vec : Common.vec32 Read_ml.reader
      val bin_read_float32_vec_ : Common.vec32 Unsafe_read_c.reader
      val bin_read_float32_vec__ : '-> '-> '-> 'd
      val bin_float64_vec : Common.vec64 Type_class.t
      val bin_writer_float64_vec : Common.vec64 Type_class.writer
      val bin_write_float64_vec_ : Common.vec64 Unsafe_write_c.writer
      val bin_write_float64_vec : Common.vec64 Write_ml.writer
      val bin_reader_float64_vec : Common.vec64 Type_class.reader
      val bin_read_float64_vec : Common.vec64 Read_ml.reader
      val bin_read_float64_vec_ : Common.vec64 Unsafe_read_c.reader
      val bin_read_float64_vec__ : '-> '-> '-> 'd
    end
  module Utils :
    sig
      val bin_dump : ?header:bool -> 'Type_class.writer -> '-> Common.buf
      val bin_read_stream :
        ?max_size:int ->
        read:(Common.buf -> pos:int -> len:int -> unit) ->
        'Type_class.reader -> 'a
      module type Make_binable_spec =
        sig
          module Binable : Binable.S
          type t
          val to_binable : t -> Binable.t
          val of_binable : Binable.t -> t
        end
      module Make_binable :
        functor (Bin_spec : Make_binable_spec->
          sig
            val bin_size_t : Bin_spec.t Size.sizer
            val bin_write_t : Bin_spec.t Map_to_safe.writer
            val bin_write_t_ : Bin_spec.t Unsafe_write_c.writer
            val bin_read_t : Bin_spec.t Read_ml.reader
            val bin_read_t_ : Bin_spec.t Unsafe_read_c.reader
            val bin_read_t__ : (int -> Bin_spec.t) Unsafe_read_c.reader
            val bin_writer_t : Bin_spec.t Type_class.writer
            val bin_reader_t : Bin_spec.t Type_class.reader
            val bin_t : Bin_spec.t Type_class.t
          end
      module type Make_binable1_spec =
        sig
          module Binable : Binable.S1
          type 'a t
          val to_binable : 'a t -> 'Binable.t
          val of_binable : 'Binable.t -> 'a t
        end
      module Make_binable1 :
        functor (Bin_spec : Make_binable1_spec->
          sig
            val bin_size_t : ('a, 'Bin_spec.t) Size.sizer1
            val bin_write_t : ('a, 'Bin_spec.t) Map_to_safe.writer1
            val bin_write_t_ : ('a, 'Bin_spec.t) Unsafe_write_c.writer1
            val bin_read_t : ('a, 'Bin_spec.t) Map_to_safe.reader1
            val bin_read_t_ : ('a, 'Bin_spec.t) Unsafe_read_c.reader1
            val bin_read_t__ :
              ('a, int -> 'Bin_spec.t) Unsafe_read_c.reader1
            val bin_writer_t : ('a, 'Bin_spec.t) Type_class.S1.writer
            val bin_reader_t : ('a, 'Bin_spec.t) Type_class.S1.reader
            val bin_t : ('a, 'Bin_spec.t) Type_class.S1.t
          end
      module type Make_binable2_spec =
        sig
          module Binable : Binable.S2
          type ('a, 'b) t
          val to_binable : ('a, 'b) t -> ('a, 'b) Binable.t
          val of_binable : ('a, 'b) Binable.t -> ('a, 'b) t
        end
      module Make_binable2 :
        functor (Bin_spec : Make_binable2_spec->
          sig
            val bin_size_t : ('a, 'b, ('a, 'b) Bin_spec.t) Size.sizer2
            val bin_write_t :
              ('a, 'b, ('a, 'b) Bin_spec.t) Map_to_safe.writer2
            val bin_write_t_ :
              ('a, 'b, ('a, 'b) Bin_spec.t) Unsafe_write_c.writer2
            val bin_read_t :
              ('a, 'b, ('a, 'b) Bin_spec.t) Map_to_safe.reader2
            val bin_read_t_ :
              ('a, 'b, ('a, 'b) Bin_spec.t) Unsafe_read_c.reader2
            val bin_read_t__ :
              ('a, 'b, int -> ('a, 'b) Bin_spec.t) Unsafe_read_c.reader2
            val bin_writer_t :
              ('a, 'b, ('a, 'b) Bin_spec.t) Type_class.S2.writer
            val bin_reader_t :
              ('a, 'b, ('a, 'b) Bin_spec.t) Type_class.S2.reader
            val bin_t : ('a, 'b, ('a, 'b) Bin_spec.t) Type_class.S2.t
          end
      module type Make_iterable_binable_spec =
        sig
          type t
          type el
          type acc
          val module_name : string option
          val length : t -> int
          val iter : t -> f:(el -> unit) -> unit
          val init : int -> acc
          val insert : acc -> el -> int -> acc
          val finish : acc -> t
          val bin_size_el : el Size.sizer
          val bin_write_el_ : el Unsafe_write_c.writer
          val bin_read_el_ : el Unsafe_read_c.reader
        end
      module Make_iterable_binable :
        functor (Iterable_spec : Make_iterable_binable_spec->
          sig
            val bin_size_t : Iterable_spec.t Size.sizer
            val bin_write_t : Iterable_spec.t Map_to_safe.writer
            val bin_write_t_ : Iterable_spec.t Unsafe_write_c.writer
            val bin_read_t : Iterable_spec.t Read_ml.reader
            val bin_read_t_ : Iterable_spec.t Unsafe_read_c.reader
            val bin_read_t__ : (int -> Iterable_spec.t) Unsafe_read_c.reader
            val bin_writer_t : Iterable_spec.t Type_class.writer
            val bin_reader_t : Iterable_spec.t Type_class.reader
            val bin_t : Iterable_spec.t Type_class.t
          end
      module type Make_iterable_binable1_spec =
        sig
          type 'a t
          type 'a el
          type 'a acc
          val module_name : string option
          val length : 'a t -> int
          val iter : 'a t -> f:('a el -> unit) -> unit
          val init : int -> 'a acc
          val insert : 'a acc -> 'a el -> int -> 'a acc
          val finish : 'a acc -> 'a t
          val bin_size_el : ('a, 'a el) Size.sizer1
          val bin_write_el_ : ('a, 'a el) Unsafe_write_c.writer1
          val bin_read_el_ : ('a, 'a el) Unsafe_read_c.reader1
        end
      module Make_iterable_binable1 :
        functor (Iterable_spec : Make_iterable_binable1_spec->
          sig
            val bin_size_t : ('a, 'Iterable_spec.t) Size.sizer1
            val bin_write_t : ('a, 'Iterable_spec.t) Map_to_safe.writer1
            val bin_write_t_ :
              ('a, 'Iterable_spec.t) Unsafe_write_c.writer1
            val bin_read_t : ('a, 'Iterable_spec.t) Map_to_safe.reader1
            val bin_read_t_ : ('a, 'Iterable_spec.t) Unsafe_read_c.reader1
            val bin_read_t__ :
              ('a, int -> 'Iterable_spec.t) Unsafe_read_c.reader1
            val bin_writer_t : ('a, 'Iterable_spec.t) Type_class.S1.writer
            val bin_reader_t : ('a, 'Iterable_spec.t) Type_class.S1.reader
            val bin_t : ('a, 'Iterable_spec.t) Type_class.S1.t
          end
      module type Make_iterable_binable2_spec =
        sig
          type ('a, 'b) t
          type ('a, 'b) el
          type ('a, 'b) acc
          val module_name : string option
          val length : ('a, 'b) t -> int
          val iter : ('a, 'b) t -> f:(('a, 'b) el -> unit) -> unit
          val init : int -> ('a, 'b) acc
          val insert : ('a, 'b) acc -> ('a, 'b) el -> int -> ('a, 'b) acc
          val finish : ('a, 'b) acc -> ('a, 'b) t
          val bin_size_el : ('a, 'b, ('a, 'b) el) Size.sizer2
          val bin_write_el_ : ('a, 'b, ('a, 'b) el) Unsafe_write_c.writer2
          val bin_read_el_ : ('a, 'b, ('a, 'b) el) Unsafe_read_c.reader2
        end
      module Make_iterable_binable2 :
        functor (Iterable_spec : Make_iterable_binable2_spec->
          sig
            val bin_size_t : ('a, 'b, ('a, 'b) Iterable_spec.t) Size.sizer2
            val bin_write_t :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Map_to_safe.writer2
            val bin_write_t_ :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Unsafe_write_c.writer2
            val bin_read_t :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Map_to_safe.reader2
            val bin_read_t_ :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Unsafe_read_c.reader2
            val bin_read_t__ :
              ('a, 'b, int -> ('a, 'b) Iterable_spec.t) Unsafe_read_c.reader2
            val bin_writer_t :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Type_class.S2.writer
            val bin_reader_t :
              ('a, 'b, ('a, 'b) Iterable_spec.t) Type_class.S2.reader
            val bin_t : ('a, 'b, ('a, 'b) Iterable_spec.t) Type_class.S2.t
          end
    end
  module Writer :
    sig
      type 'a t =
        'Bin_prot.Type_class.writer = {
        size : 'Size.sizer;
        write : 'Write_ml.writer;
        unsafe_write : 'Unsafe_write_c.writer;
      }
      val to_string : 'a t -> '-> string
    end
  val ounit_tests : unit -> OUnit.test
end