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 : Utils.Make_binable_spec.t -> Binable.t
      val of_binable : Binable.t -> Utils.Make_binable_spec.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 : 'Utils.Make_binable1_spec.t -> 'Binable.t
      val of_binable : 'Binable.t -> 'Utils.Make_binable1_spec.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) Utils.Make_binable2_spec.t -> ('a, 'b) Binable.t
      val of_binable :
        ('a, 'b) Binable.t -> ('a, 'b) Utils.Make_binable2_spec.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 : Utils.Make_iterable_binable_spec.t -> int
      val iter :
        Utils.Make_iterable_binable_spec.t ->
        f:(Utils.Make_iterable_binable_spec.el -> unit) -> unit
      val init : int -> Utils.Make_iterable_binable_spec.acc
      val insert :
        Utils.Make_iterable_binable_spec.acc ->
        Utils.Make_iterable_binable_spec.el ->
        int -> Utils.Make_iterable_binable_spec.acc
      val finish :
        Utils.Make_iterable_binable_spec.acc ->
        Utils.Make_iterable_binable_spec.t
      val bin_size_el : Utils.Make_iterable_binable_spec.el Size.sizer
      val bin_write_el_ :
        Utils.Make_iterable_binable_spec.el Unsafe_write_c.writer
      val bin_read_el_ :
        Utils.Make_iterable_binable_spec.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 : 'Utils.Make_iterable_binable1_spec.t -> int
      val iter :
        'Utils.Make_iterable_binable1_spec.t ->
        f:('Utils.Make_iterable_binable1_spec.el -> unit) -> unit
      val init : int -> 'Utils.Make_iterable_binable1_spec.acc
      val insert :
        'Utils.Make_iterable_binable1_spec.acc ->
        'Utils.Make_iterable_binable1_spec.el ->
        int -> 'Utils.Make_iterable_binable1_spec.acc
      val finish :
        'Utils.Make_iterable_binable1_spec.acc ->
        'Utils.Make_iterable_binable1_spec.t
      val bin_size_el :
        ('a, 'Utils.Make_iterable_binable1_spec.el) Size.sizer1
      val bin_write_el_ :
        ('a, 'Utils.Make_iterable_binable1_spec.el) Unsafe_write_c.writer1
      val bin_read_el_ :
        ('a, 'Utils.Make_iterable_binable1_spec.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) Utils.Make_iterable_binable2_spec.t -> int
      val iter :
        ('a, 'b) Utils.Make_iterable_binable2_spec.t ->
        f:(('a, 'b) Utils.Make_iterable_binable2_spec.el -> unit) -> unit
      val init : int -> ('a, 'b) Utils.Make_iterable_binable2_spec.acc
      val insert :
        ('a, 'b) Utils.Make_iterable_binable2_spec.acc ->
        ('a, 'b) Utils.Make_iterable_binable2_spec.el ->
        int -> ('a, 'b) Utils.Make_iterable_binable2_spec.acc
      val finish :
        ('a, 'b) Utils.Make_iterable_binable2_spec.acc ->
        ('a, 'b) Utils.Make_iterable_binable2_spec.t
      val bin_size_el :
        ('a, 'b, ('a, 'b) Utils.Make_iterable_binable2_spec.el) Size.sizer2
      val bin_write_el_ :
        ('a, 'b, ('a, 'b) Utils.Make_iterable_binable2_spec.el)
        Unsafe_write_c.writer2
      val bin_read_el_ :
        ('a, 'b, ('a, 'b) Utils.Make_iterable_binable2_spec.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