sig
  type t
  type _ kind =
      String : Js_string.t Js_json.kind
    | Number : float Js_json.kind
    | Object : Js_json.t Js_dict.t Js_json.kind
    | Array : Js_json.t array Js_json.kind
    | Boolean : Js.boolean Js_json.kind
    | Null : Js_types.null_val Js_json.kind
  val reifyType : Js_json.t -> 'Js_json.kind * 'b
  val test : '-> 'Js_json.kind -> bool
  val decodeString : Js_json.t -> Js_string.t option
  val decodeNumber : Js_json.t -> float option
  val decodeObject : Js_json.t -> Js_json.t Js_dict.t option
  val decodeArray : Js_json.t -> Js_json.t array option
  val decodeBoolean : Js_json.t -> Js.boolean option
  val decodeNull : Js_json.t -> 'Js_null.t option
  external null : Js_json.t = "" "BS:1.7.0  @@$null@"
  external string : string -> Js_json.t = "%identity"
  external number : float -> Js_json.t = "%identity"
  external boolean : Js.boolean -> Js_json.t = "%identity"
  external object_ : Js_json.t Js_dict.t -> Js_json.t = "%identity"
  external array_ : Js_json.t array -> Js_json.t = "%identity"
  external array : Js_json.t array -> Js_json.t = "%identity"
  external stringArray : string array -> Js_json.t = "%identity"
  external numberArray : float array -> Js_json.t = "%identity"
  external booleanArray : Js.boolean array -> Js_json.t = "%identity"
  external objectArray : Js_json.t Js_dict.t array -> Js_json.t = "%identity"
  external parse : string -> Js_json.t = "JSON.parse"
    "BS:1.7.0B@@@*JSON.parse@@"
  external parseExn : string -> Js_json.t = "JSON.parse"
    "BS:1.7.0B@@@*JSON.parse@@"
  external stringify : Js_json.t -> string = "JSON.stringify"
    "BS:1.7.0B@@@.JSON.stringify@@"
  external stringifyAny : '-> string option = "JSON.stringify"
    "BS:1.7.0B@@B.JSON.stringify@@"
  val reify_type : '-> 'Js_json.kind * 'b
end