sig
  type json =
      [ `Assoc of (string * Json.json) list
      | `Bool of bool
      | `Float of float
      | `Int of int
      | `List of Json.json list
      | `Null
      | `String of string ]
  type t = Json.json
  val equal : Json.t -> Json.t -> bool
  val compare : Json.t -> Json.t -> int
  val pp : Stdlib.Format.formatter -> Json.t -> unit
  val pp_dump : Stdlib.Format.formatter -> Json.t -> unit
  exception Error of Filepath.Normalized.t * int * string
  val of_bool : bool -> Json.t
  val of_int : int -> Json.t
  val of_string : string -> Json.t
  val of_float : float -> Json.t
  val of_list : Json.t list -> Json.t
  val of_array : Json.t array -> Json.t
  val of_fields : (string * Json.t) list -> Json.t
  val load_lexbuf : Stdlib.Lexing.lexbuf -> Json.t
  val load_channel : ?file:string -> Stdlib.in_channel -> Json.t
  val load_string : string -> Json.t
  val load_file : string -> Json.t
  val save_string : ?pretty:bool -> Json.t -> string
  val save_buffer : ?pretty:bool -> Stdlib.Buffer.t -> Json.t -> unit
  val save_channel : ?pretty:bool -> Stdlib.out_channel -> Json.t -> unit
  val save_formatter :
    ?pretty:bool -> Stdlib.Format.formatter -> Json.t -> unit
  val save_file : ?pretty:bool -> string -> Json.t -> unit
  val bool : Json.t -> bool
  val int : Json.t -> int
  val string : Json.t -> string
  val float : Json.t -> float
  val array : Json.t -> Json.t array
  val list : Json.t -> Json.t list
  val assoc : Json.t -> (string * Json.t) list
  val fold : (string -> Json.t -> '-> 'a) -> Json.t -> '-> 'a
  val field : string -> Json.t -> Json.t
  exception CannotMerge of string
  val merge_object : Filepath.Normalized.t -> Yojson.Basic.t -> unit
  val merge_array : Filepath.Normalized.t -> Yojson.Basic.t -> unit
  val from_file : Filepath.Normalized.t -> Yojson.Basic.t
  val flush_cache : unit -> Filepath.Normalized.t list
end