sig   type 'a parsed_json = 'a     constraint 'a =       [< `A of 'a list        | `Bool of bool        | `Float of float        | `Null        | `O of (string * 'a) list        | `String of string ]   type 'a o =       [ `Opt of string * 'Kwvalid.Json.descriptor       | `Req of string * 'Kwvalid.Json.descriptor ] list   and 'a descriptor =       [ `A of ('a list -> bool) * 'Kwvalid.Json.descriptor       | `Bool of Kwvalid.t       | `Float of Kwvalid.t       | `Null       | `O of 'Kwvalid.Json.o       | `String of Kwvalid.t ]   val string_of_o :     ([< `Opt of           string *           ([< `A of 'c * 'b             | `Bool of Kwvalid.t             | `Float of Kwvalid.t             | `Null             | `O of 'a             | `String of Kwvalid.t ]            as 'b)       | `Req of string * 'b ]      list as 'a) ->     string   val string_of_descriptor :     ([< `A of 'b * 'a       | `Bool of Kwvalid.t       | `Float of Kwvalid.t       | `Null       | `O of [< `Opt of string * '| `Req of string * 'a ] list       | `String of Kwvalid.t ]      as 'a) ->     string   module Size :     sig       val exactly : int -> 'a list -> bool       val any : '-> bool       val min : int -> 'a list -> bool       val max : int -> 'a list -> bool     end   module Num :     sig       val any : t       val whilst : (float -> bool) -> string -> bool       val eq : float -> t       val gt : float -> t       val gte : float -> t       val lt : float -> t       val lte : float -> t     end   val make :     (string ->      ([< `A of 'a list        | `Bool of bool        | `Float of float        | `Null        | `O of ('b * 'a) list        | `String of string ]       as 'a)) ->     ([ `A of ('a list -> bool) * 'c      | `Bool of Kwvalid.t      | `Float of Kwvalid.t      | `Null      | `O of          [< `Opt of string * '& 'b * '| `Req of string * '& 'b * 'c ]          list      | `String of Kwvalid.t ] as 'c) ->     Kwvalid.t end