sig
  type node_tag = int
  val bool_tag : Bi_io.node_tag
  val int8_tag : Bi_io.node_tag
  val int16_tag : Bi_io.node_tag
  val int32_tag : Bi_io.node_tag
  val int64_tag : Bi_io.node_tag
  val float32_tag : Bi_io.node_tag
  val float64_tag : Bi_io.node_tag
  val uvint_tag : Bi_io.node_tag
  val svint_tag : Bi_io.node_tag
  val string_tag : Bi_io.node_tag
  val array_tag : Bi_io.node_tag
  val tuple_tag : Bi_io.node_tag
  val record_tag : Bi_io.node_tag
  val num_variant_tag : Bi_io.node_tag
  val variant_tag : Bi_io.node_tag
  val unit_tag : Bi_io.node_tag
  val table_tag : Bi_io.node_tag
  val shared_tag : Bi_io.node_tag
  val write_tag : Bi_outbuf.t -> Bi_io.node_tag -> unit
  val read_tag : Bi_inbuf.t -> Bi_io.node_tag
  type hash = int
  val hash_name : string -> Bi_io.hash
  val write_hashtag : Bi_outbuf.t -> Bi_io.hash -> bool -> unit
  val string_of_hashtag : Bi_io.hash -> bool -> string
  val read_hashtag :
    Bi_inbuf.t -> (Bi_inbuf.t -> Bi_io.hash -> bool -> 'a) -> 'a
  val read_field_hashtag : Bi_inbuf.t -> Bi_io.hash
  val make_unhash : string list -> Bi_io.hash -> string option
  type int7 = int
  val write_numtag : Bi_outbuf.t -> Bi_io.int7 -> bool -> unit
  val read_numtag :
    Bi_inbuf.t -> (Bi_inbuf.t -> Bi_io.int7 -> bool -> 'a) -> 'a
  val write_untagged_unit : Bi_outbuf.t -> unit -> unit
  val write_untagged_bool : Bi_outbuf.t -> bool -> unit
  val write_untagged_char : Bi_outbuf.t -> char -> unit
  val write_untagged_int8 : Bi_outbuf.t -> int -> unit
  val write_untagged_int16 : Bi_outbuf.t -> int -> unit
  val write_untagged_int32 : Bi_outbuf.t -> int32 -> unit
  val write_untagged_int64 : Bi_outbuf.t -> int64 -> unit
  val write_untagged_float32 : Bi_outbuf.t -> float -> unit
  val write_untagged_float64 : Bi_outbuf.t -> float -> unit
  val write_untagged_string : Bi_outbuf.t -> string -> unit
  val write_untagged_uvint : Bi_outbuf.t -> int -> unit
  val write_untagged_svint : Bi_outbuf.t -> int -> unit
  val write_unit : Bi_outbuf.t -> unit -> unit
  val write_bool : Bi_outbuf.t -> bool -> unit
  val write_char : Bi_outbuf.t -> char -> unit
  val write_int8 : Bi_outbuf.t -> int -> unit
  val write_int16 : Bi_outbuf.t -> int -> unit
  val write_int32 : Bi_outbuf.t -> int32 -> unit
  val write_int64 : Bi_outbuf.t -> int64 -> unit
  val write_float32 : Bi_outbuf.t -> float -> unit
  val write_float64 : Bi_outbuf.t -> float -> unit
  val write_string : Bi_outbuf.t -> string -> unit
  val write_uvint : Bi_outbuf.t -> int -> unit
  val write_svint : Bi_outbuf.t -> int -> unit
  val read_untagged_unit : Bi_inbuf.t -> unit
  val read_untagged_bool : Bi_inbuf.t -> bool
  val read_untagged_char : Bi_inbuf.t -> char
  val read_untagged_int8 : Bi_inbuf.t -> int
  val read_untagged_int16 : Bi_inbuf.t -> int
  val read_untagged_int32 : Bi_inbuf.t -> int32
  val read_untagged_int64 : Bi_inbuf.t -> int64
  val read_untagged_float32 : Bi_inbuf.t -> float
  val read_untagged_float64 : Bi_inbuf.t -> float
  val read_untagged_string : Bi_inbuf.t -> string
  val read_untagged_uvint : Bi_inbuf.t -> int
  val read_untagged_svint : Bi_inbuf.t -> int
  val skip : Bi_inbuf.t -> unit
  type tree =
      [ `Array of (Bi_io.node_tag * Bi_io.tree array) option
      | `Bool of bool
      | `Float32 of float
      | `Float64 of float
      | `Int16 of int
      | `Int32 of Int32.t
      | `Int64 of Int64.t
      | `Int8 of char
      | `Num_variant of int * Bi_io.tree option
      | `Record of (string option * Bi_io.hash * Bi_io.tree) array
      | `Shared of Bi_io.tree
      | `String of string
      | `Svint of int
      | `Table of
          ((string option * Bi_io.hash * Bi_io.node_tag) array *
           Bi_io.tree array array)
          option
      | `Tuple of Bi_io.tree array
      | `Unit
      | `Uvint of int
      | `Variant of string option * Bi_io.hash * Bi_io.tree option ]
  val write_tree : Bi_outbuf.t -> Bi_io.tree -> unit
  val string_of_tree : Bi_io.tree -> string
  val read_tree :
    ?unhash:(Bi_io.hash -> string option) -> Bi_inbuf.t -> Bi_io.tree
  val tree_of_string :
    ?unhash:(Bi_io.hash -> string option) -> string -> Bi_io.tree
  val tag_of_tree : Bi_io.tree -> Bi_io.node_tag
  val view_of_tree : Bi_io.tree -> string
  val view : ?unhash:(Bi_io.hash -> string option) -> string -> string
  val print_view_of_tree : Bi_io.tree -> unit
  val print_view : ?unhash:(Bi_io.hash -> string option) -> string -> unit
  val output_view_of_tree : Pervasives.out_channel -> Bi_io.tree -> unit
  val output_view :
    ?unhash:(Bi_io.hash -> string option) ->
    Pervasives.out_channel -> string -> unit
  val safety_test : unit -> unit
end