sig
  type 'a writer = { size : 'Size.sizer; write : 'Write.writer; }
  type 'a reader = {
    read : 'Read.reader;
    vtag_read : (int -> 'a) Read.reader;
  }
  type 'a t = {
    writer : 'Type_class.writer;
    reader : 'Type_class.reader;
  }
  type 'a writer0 = 'Type_class.writer
  type 'a reader0 = 'Type_class.reader
  type 'a t0 = 'Type_class.t
  module S1 :
    sig
      type ('a, 'b) writer = 'Type_class.writer0 -> 'Type_class.writer0
      type ('a, 'b) reader = 'Type_class.reader0 -> 'Type_class.reader0
      type ('a, 'b) t = 'Type_class.t0 -> 'Type_class.t0
    end
  module S2 :
    sig
      type ('a, 'b, 'c) writer =
          'Type_class.writer0 -> ('b, 'c) Type_class.S1.writer
      type ('a, 'b, 'c) reader =
          'Type_class.reader0 -> ('b, 'c) Type_class.S1.reader
      type ('a, 'b, 'c) t = 'Type_class.t0 -> ('b, 'c) Type_class.S1.t
    end
  module S3 :
    sig
      type ('a, 'b, 'c, 'd) writer =
          'Type_class.writer0 -> ('b, 'c, 'd) Type_class.S2.writer
      type ('a, 'b, 'c, 'd) reader =
          'Type_class.reader0 -> ('b, 'c, 'd) Type_class.S2.reader
      type ('a, 'b, 'c, 'd) t =
          'Type_class.t0 -> ('b, 'c, 'd) Type_class.S2.t
    end
  val bin_writer_unit : unit Type_class.writer
  val bin_reader_unit : unit Type_class.reader
  val bin_unit : unit Type_class.t
  val bin_writer_bool : bool Type_class.writer
  val bin_reader_bool : bool Type_class.reader
  val bin_bool : bool Type_class.t
  val bin_writer_string : string Type_class.writer
  val bin_reader_string : string Type_class.reader
  val bin_string : string Type_class.t
  val bin_writer_char : char Type_class.writer
  val bin_reader_char : char Type_class.reader
  val bin_char : char Type_class.t
  val bin_writer_int : int Type_class.writer
  val bin_reader_int : int Type_class.reader
  val bin_int : int Type_class.t
  val bin_writer_float : float Type_class.writer
  val bin_reader_float : float Type_class.reader
  val bin_float : float Type_class.t
  val bin_writer_int32 : int32 Type_class.writer
  val bin_reader_int32 : int32 Type_class.reader
  val bin_int32 : int32 Type_class.t
  val bin_writer_int64 : int64 Type_class.writer
  val bin_reader_int64 : int64 Type_class.reader
  val bin_int64 : int64 Type_class.t
  val bin_writer_nativeint : nativeint Type_class.writer
  val bin_reader_nativeint : nativeint Type_class.reader
  val bin_nativeint : nativeint Type_class.t
  val bin_writer_nat0 : Nat0.t Type_class.writer
  val bin_reader_nat0 : Nat0.t Type_class.reader
  val bin_nat0 : Nat0.t Type_class.t
  val bin_writer_ref : ('a, 'Pervasives.ref) Type_class.S1.writer
  val bin_reader_ref : ('a, 'Pervasives.ref) Type_class.S1.reader
  val bin_ref : ('a, 'Pervasives.ref) Type_class.S1.t
  val bin_writer_lazy : ('a, 'a lazy_t) Type_class.S1.writer
  val bin_reader_lazy : ('a, 'a lazy_t) Type_class.S1.reader
  val bin_lazy : ('a, 'a lazy_t) Type_class.S1.t
  val bin_writer_option : ('a, 'a option) Type_class.S1.writer
  val bin_reader_option : ('a, 'a option) Type_class.S1.reader
  val bin_option : ('a, 'a option) Type_class.S1.t
  val bin_writer_pair : ('a, 'b, 'a * 'b) Type_class.S2.writer
  val bin_reader_pair : ('a, 'b, 'a * 'b) Type_class.S2.reader
  val bin_pair : ('a, 'b, 'a * 'b) Type_class.S2.t
  val bin_writer_triple : ('a, 'b, 'c, 'a * 'b * 'c) Type_class.S3.writer
  val bin_reader_triple : ('a, 'b, 'c, 'a * 'b * 'c) Type_class.S3.reader
  val bin_triple : ('a, 'b, 'c, 'a * 'b * 'c) Type_class.S3.t
  val bin_writer_list : ('a, 'a list) Type_class.S1.writer
  val bin_reader_list : ('a, 'a list) Type_class.S1.reader
  val bin_list : ('a, 'a list) Type_class.S1.t
  val bin_writer_array : ('a, 'a array) Type_class.S1.writer
  val bin_reader_array : ('a, 'a array) Type_class.S1.reader
  val bin_array : ('a, 'a array) Type_class.S1.t
  val bin_writer_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.writer
  val bin_reader_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.reader
  val bin_hashtbl : ('a, 'b, ('a, 'b) Hashtbl.t) Type_class.S2.t
  val bin_writer_float32_vec : Common.vec32 Type_class.writer
  val bin_reader_float32_vec : Common.vec32 Type_class.reader
  val bin_float32_vec : Common.vec32 Type_class.t
  val bin_writer_float64_vec : Common.vec64 Type_class.writer
  val bin_reader_float64_vec : Common.vec64 Type_class.reader
  val bin_float64_vec : Common.vec64 Type_class.t
  val bin_writer_vec : Common.vec Type_class.writer
  val bin_reader_vec : Common.vec Type_class.reader
  val bin_vec : Common.vec Type_class.t
  val bin_writer_float32_mat : Common.mat32 Type_class.writer
  val bin_reader_float32_mat : Common.mat32 Type_class.reader
  val bin_float32_mat : Common.mat32 Type_class.t
  val bin_writer_float64_mat : Common.mat64 Type_class.writer
  val bin_reader_float64_mat : Common.mat64 Type_class.reader
  val bin_float64_mat : Common.mat64 Type_class.t
  val bin_writer_mat : Common.mat Type_class.writer
  val bin_reader_mat : Common.mat Type_class.reader
  val bin_mat : Common.mat Type_class.t
  val bin_writer_bigstring : Common.buf Type_class.writer
  val bin_reader_bigstring : Common.buf Type_class.reader
  val bin_bigstring : Common.buf Type_class.t
  val bin_writer_float_array : float array Type_class.writer
  val bin_reader_float_array : float array Type_class.reader
  val bin_float_array : float array Type_class.t
  val bin_writer_variant_tag : [>  ] Type_class.writer
  val bin_reader_variant_tag : [>  ] Type_class.reader
  val bin_variant_tag : [>  ] Type_class.t
  val bin_writer_int_8bit : int Type_class.writer
  val bin_reader_int_8bit : int Type_class.reader
  val bin_int_8bit : int Type_class.t
  val bin_writer_int_16bit : int Type_class.writer
  val bin_reader_int_16bit : int Type_class.reader
  val bin_int_16bit : int Type_class.t
  val bin_writer_int_32bit : int Type_class.writer
  val bin_reader_int_32bit : int Type_class.reader
  val bin_int_32bit : int Type_class.t
  val bin_writer_int_64bit : int Type_class.writer
  val bin_reader_int_64bit : int Type_class.reader
  val bin_int_64bit : int Type_class.t
  val bin_writer_int64_bits : int64 Type_class.writer
  val bin_reader_int64_bits : int64 Type_class.reader
  val bin_int64_bits : int64 Type_class.t
  val bin_writer_network16_int : int Type_class.writer
  val bin_reader_network16_int : int Type_class.reader
  val bin_network16_int : int Type_class.t
  val bin_writer_network32_int : int Type_class.writer
  val bin_reader_network32_int : int Type_class.reader
  val bin_network32_int : int Type_class.t
  val bin_writer_network32_int32 : int32 Type_class.writer
  val bin_reader_network32_int32 : int32 Type_class.reader
  val bin_network32_int32 : int32 Type_class.t
  val bin_writer_network64_int : int Type_class.writer
  val bin_reader_network64_int : int Type_class.reader
  val bin_network64_int : int Type_class.t
  val bin_writer_network64_int64 : int64 Type_class.writer
  val bin_reader_network64_int64 : int64 Type_class.reader
  val bin_network64_int64 : int64 Type_class.t
  val bin_writer_array_no_length : ('a, 'a array) Type_class.S1.writer
  val cnv_writer : ('-> 'b) -> 'Type_class.writer -> 'Type_class.writer
  val cnv_reader : ('-> 'a) -> 'Type_class.reader -> 'Type_class.reader
  val cnv : ('-> 'b) -> ('-> 'a) -> 'Type_class.t -> 'Type_class.t
end