sig
  type json =
      [ `Assoc of (string * Kojson.json) list
      | `Bool of bool
      | `Float of float
      | `Int of int
      | `List of Kojson.json list
      | `Null
      | `String of string ]
  type path = [ `Index of int | `Label of string ] list
  val string_of_path : Kojson.path -> string
  type expectation =
      [ `either of (Kojson.path * Kojson.expectation) list
      | `expecting_label of string
      | `expecting_type of string
      | `expecting_value of Kojson.json
      | `expecting_values of Kojson.json list
      | `not_expecting_labels of string list ]
  exception Mismatch of Kojson.path * Kojson.expectation
  val string_of_mismatch : Kojson.path * Kojson.expectation -> string
  val default_warn : (Kojson.path -> string -> unit) Pervasives.ref
  type jin = Kojson_private.jin
  val jin_of_json :
    ?warn:(Kojson.path -> string -> unit) ->
    ?path:Kojson.path -> Kojson.json -> Kojson.jin
  val jin_path : Kojson.jin -> Kojson.path
  type jain = Kojson_private.jain
  val jain_path : Kojson.jain -> Kojson.path
end