sig
  type 'a writer =
      [ `writing of
          (unit -> unit) list Pervasives.ref * (string -> '-> unit) ]
  type 'a reader =
      [ `reading of
          string Pervasives.ref * 'Pervasives.ref * (unit -> unit) *
          (float -> float) ]
  type 'a serializer =
      [ `reading of
          string Pervasives.ref * 'Pervasives.ref * (unit -> unit) *
          (float -> float)
      | `writing of
          (unit -> unit) list Pervasives.ref * (string -> '-> unit) ]
  val write : 'Serialize.writer -> ?key:string -> '-> unit
  val peek : 'Serialize.reader -> string * 'a
  val junk : 'Serialize.reader -> unit
  val junk_structure :
    [> `end_of_list | `end_of_record | `list of [> `any ] | `record ]
    Serialize.reader -> unit
  val make_io :
    ('-> 'b) ->
    ('-> 'a) -> ?key:string -> '-> 'Serialize.serializer -> 'a
  val io_bool :
    ?key:string -> bool -> [> `bool of bool ] Serialize.serializer -> bool
  val io_char :
    ?key:string -> char -> [> `char of char ] Serialize.serializer -> char
  val io_float :
    ?key:string ->
    float -> [> `float of float | `int of int ] Serialize.serializer -> float
  val io_int :
    ?key:string -> int -> [> `int of int ] Serialize.serializer -> int
  val io_string :
    ?key:string ->
    string ->
    [> `char of char | `string of string ] Serialize.serializer -> string
  val io_tag :
    ?key:string ->
    string -> [> `tag of string ] Serialize.serializer -> string
  val io_time :
    ?key:string ->
    float ->
    [> `float of float | `time of float ] Serialize.serializer -> float
  val io_option :
    (?key:string ->
     '-> ([> `none | `some ] as 'b) Serialize.serializer -> 'a) ->
    '-> ?key:string -> 'a option -> 'Serialize.serializer -> 'a option
  val io_record :
    ('->
     ([> `end_of_list | `end_of_record | `list of [> `any ] | `record ] as 'b)
     Serialize.serializer -> 'a) ->
    ?key:string -> '-> 'Serialize.serializer -> 'a
  val io_list :
    (?key:string ->
     '->
     ([> `end_of_list
       | `end_of_record
       | `list of [> `any | `record ]
       | `record ]
      as 'b)
     Serialize.serializer -> 'a) ->
    '-> ?key:string -> 'a list -> 'Serialize.serializer -> 'a list
end