sig
  type ('a, +'b) query = ('a, 'b) OLinq.t
    constraint 'b = [< `Any | `AtMostOne | `One ]
  type json =
      [ `Assoc of (string * OLinq_json.json) list
      | `Bool of bool
      | `Float of float
      | `Int of int
      | `Intlit of string
      | `List of OLinq_json.json list
      | `Null
      | `String of string
      | `Tuple of OLinq_json.json list
      | `Variant of string * OLinq_json.json option ]
  val as_list :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (OLinq_json.json list, [ `Any ]) OLinq_json.query
  val as_assoc :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    ((string * OLinq_json.json) list, [ `Any ]) OLinq_json.query
  val as_bool :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (bool, [ `Any ]) OLinq_json.query
  val as_int :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (int, [ `Any ]) OLinq_json.query
  val as_int_lit :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (string, [ `Any ]) OLinq_json.query
  val as_float :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (float, [ `Any ]) OLinq_json.query
  val as_null :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (unit, [ `Any ]) OLinq_json.query
  val as_string :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (string, [ `Any ]) OLinq_json.query
  val as_tuple :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (OLinq_json.json list, [ `Any ]) OLinq_json.query
  val as_variant :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (string * OLinq_json.json option, [ `Any ]) OLinq_json.query
  val assoc :
    string ->
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (OLinq_json.json, [ `Any ]) OLinq_json.query
  val enter_assoc :
    (OLinq_json.json, [< `AtMostOne | `One ]) OLinq_json.query ->
    (string * OLinq_json.json, [ `Any ]) OLinq_json.query
  val enter_list :
    (OLinq_json.json, [< `Any | `AtMostOne | `One > `AtMostOne `One ])
    OLinq_json.query -> (OLinq_json.json, [ `Any ]) OLinq_json.query
  val enter_tuple :
    (OLinq_json.json, [< `AtMostOne | `One ]) OLinq_json.query ->
    (OLinq_json.json, [ `Any ]) OLinq_json.query
  val enter_tuple_index :
    (OLinq_json.json, [< `Any | `AtMostOne | `One ]) OLinq_json.query ->
    (int * OLinq_json.json, [ `Any ]) OLinq_json.query
  val map_list :
    (OLinq_json.json -> (OLinq_json.json, [ `One ]) OLinq_json.query) ->
    OLinq_json.json ->
    (OLinq_json.json, [ `AtMostOne | `One ]) OLinq_json.query
  val map_assoc :
    (string ->
     OLinq_json.json -> (OLinq_json.json, [ `One ]) OLinq_json.query) ->
    OLinq_json.json ->
    (OLinq_json.json, [ `AtMostOne | `One ]) OLinq_json.query
end