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.binable
      val of_binable : Binable.binable -> Utils.Make_binable_spec.t
    end
  module Make_binable :
    functor (Bin_spec : Make_binable_spec->
      sig
        type binable = Bin_spec.t
        val bin_size_t : binable Size.sizer
        val bin_write_t : binable Map_to_safe.writer
        val bin_write_t_ : binable Unsafe_write_c.writer
        val bin_read_t : binable Read_ml.reader
        val bin_read_t_ : binable Unsafe_read_c.reader
        val bin_read_t__ : (int -> binable) Unsafe_read_c.reader
        val bin_writer_t : binable Type_class.writer
        val bin_reader_t : binable Type_class.reader
        val bin_t : binable 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.binable
      val of_binable : 'Binable.binable -> 'Utils.Make_binable1_spec.t
    end
  module Make_binable1 :
    functor (Bin_spec : Make_binable1_spec->
      sig
        type 'a binable = 'Bin_spec.t
        val bin_size_t : ('a, 'a binable) Size.sizer1
        val bin_write_t : ('a, 'a binable) Map_to_safe.writer1
        val bin_write_t_ : ('a, 'a binable) Unsafe_write_c.writer1
        val bin_read_t : ('a, 'a binable) Map_to_safe.reader1
        val bin_read_t_ : ('a, 'a binable) Unsafe_read_c.reader1
        val bin_read_t__ : ('a, int -> 'a binable) Unsafe_read_c.reader1
        val bin_writer_t : ('a, 'a binable) Type_class.S1.writer
        val bin_reader_t : ('a, 'a binable) Type_class.S1.reader
        val bin_t : ('a, 'a binable) 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.binable
      val of_binable :
        ('a, 'b) Binable.binable -> ('a, 'b) Utils.Make_binable2_spec.t
    end
  module Make_binable2 :
    functor (Bin_spec : Make_binable2_spec->
      sig
        type ('a, 'b) binable = ('a, 'b) Bin_spec.t
        val bin_size_t : ('a, 'b, ('a, 'b) binable) Size.sizer2
        val bin_write_t : ('a, 'b, ('a, 'b) binable) Map_to_safe.writer2
        val bin_write_t_ : ('a, 'b, ('a, 'b) binable) Unsafe_write_c.writer2
        val bin_read_t : ('a, 'b, ('a, 'b) binable) Map_to_safe.reader2
        val bin_read_t_ : ('a, 'b, ('a, 'b) binable) Unsafe_read_c.reader2
        val bin_read_t__ :
          ('a, 'b, int -> ('a, 'b) binable) Unsafe_read_c.reader2
        val bin_writer_t : ('a, 'b, ('a, 'b) binable) Type_class.S2.writer
        val bin_reader_t : ('a, 'b, ('a, 'b) binable) Type_class.S2.reader
        val bin_t : ('a, 'b, ('a, 'b) binable) 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 :
        f:(Utils.Make_iterable_binable_spec.el -> unit) ->
        Utils.Make_iterable_binable_spec.t -> 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
        type binable = Iterable_spec.t
        val bin_size_t : binable Size.sizer
        val bin_write_t : binable Map_to_safe.writer
        val bin_write_t_ : binable Unsafe_write_c.writer
        val bin_read_t : binable Read_ml.reader
        val bin_read_t_ : binable Unsafe_read_c.reader
        val bin_read_t__ : (int -> binable) Unsafe_read_c.reader
        val bin_writer_t : binable Type_class.writer
        val bin_reader_t : binable Type_class.reader
        val bin_t : binable 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 :
        f:('Utils.Make_iterable_binable1_spec.el -> unit) ->
        'Utils.Make_iterable_binable1_spec.t -> 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
        type 'a binable = 'Iterable_spec.t
        val bin_size_t : ('a, 'a binable) Size.sizer1
        val bin_write_t : ('a, 'a binable) Map_to_safe.writer1
        val bin_write_t_ : ('a, 'a binable) Unsafe_write_c.writer1
        val bin_read_t : ('a, 'a binable) Map_to_safe.reader1
        val bin_read_t_ : ('a, 'a binable) Unsafe_read_c.reader1
        val bin_read_t__ : ('a, int -> 'a binable) Unsafe_read_c.reader1
        val bin_writer_t : ('a, 'a binable) Type_class.S1.writer
        val bin_reader_t : ('a, 'a binable) Type_class.S1.reader
        val bin_t : ('a, 'a binable) 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 :
        f:(('a, 'b) Utils.Make_iterable_binable2_spec.el -> unit) ->
        ('a, 'b) Utils.Make_iterable_binable2_spec.t -> 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
        type ('a, 'b) binable = ('a, 'b) Iterable_spec.t
        val bin_size_t : ('a, 'b, ('a, 'b) binable) Size.sizer2
        val bin_write_t : ('a, 'b, ('a, 'b) binable) Map_to_safe.writer2
        val bin_write_t_ : ('a, 'b, ('a, 'b) binable) Unsafe_write_c.writer2
        val bin_read_t : ('a, 'b, ('a, 'b) binable) Map_to_safe.reader2
        val bin_read_t_ : ('a, 'b, ('a, 'b) binable) Unsafe_read_c.reader2
        val bin_read_t__ :
          ('a, 'b, int -> ('a, 'b) binable) Unsafe_read_c.reader2
        val bin_writer_t : ('a, 'b, ('a, 'b) binable) Type_class.S2.writer
        val bin_reader_t : ('a, 'b, ('a, 'b) binable) Type_class.S2.reader
        val bin_t : ('a, 'b, ('a, 'b) binable) Type_class.S2.t
      end
end