sig
  type lexeme =
      [ `Ae
      | `As
      | `Bool of bool
      | `Float of float
      | `Name of string
      | `Null
      | `Oe
      | `Os
      | `String of string ]
  val pp_lexeme : Format.formatter -> [< Jsonm.lexeme ] -> unit
  type error =
      [ `Expected of
          [ `Aval of bool
          | `Comment
          | `Eoi
          | `Json
          | `Name
          | `Name_sep
          | `Omem of bool
          | `Value ]
      | `Illegal_BOM
      | `Illegal_bytes of string
      | `Illegal_escape of
          [ `Lone_hi_surrogate of int
          | `Lone_lo_surrogate of int
          | `Not_esc_uchar of int
          | `Not_hex_uchar of int
          | `Not_lo_surrogate of int ]
      | `Illegal_literal of string
      | `Illegal_number of string
      | `Illegal_string_uchar of int
      | `Unclosed of [ `As | `Comment | `Os | `String ] ]
  val pp_error : Format.formatter -> [< Jsonm.error ] -> unit
  type encoding = [ `UTF_16 | `UTF_16BE | `UTF_16LE | `UTF_8 ]
  type src =
      [ `Channel of Pervasives.in_channel | `Manual | `String of string ]
  type decoder
  val decoder :
    ?encoding:[< Jsonm.encoding ] -> [< Jsonm.src ] -> Jsonm.decoder
  val decode :
    Jsonm.decoder ->
    [> `Await | `End | `Error of Jsonm.error | `Lexeme of Jsonm.lexeme ]
  val decoded_range : Jsonm.decoder -> (int * int) * (int * int)
  val decoder_encoding : Jsonm.decoder -> Jsonm.encoding
  val decoder_src : Jsonm.decoder -> Jsonm.src
  type dst =
      [ `Buffer of Buffer.t | `Channel of Pervasives.out_channel | `Manual ]
  type encoder
  val encoder : ?minify:bool -> [< Jsonm.dst ] -> Jsonm.encoder
  val encode :
    Jsonm.encoder ->
    [< `Await | `End | `Lexeme of Jsonm.lexeme ] -> [ `Ok | `Partial ]
  val encoder_dst : Jsonm.encoder -> Jsonm.dst
  val encoder_minify : Jsonm.encoder -> bool
  module Manual :
    sig
      val src : Jsonm.decoder -> string -> int -> int -> unit
      val dst : Jsonm.encoder -> string -> int -> int -> unit
      val dst_rem : Jsonm.encoder -> int
    end
  module Uncut :
    sig
      val decode :
        Jsonm.decoder ->
        [ `Await
        | `Comment of [ `M | `S ] * string
        | `End
        | `Error of Jsonm.error
        | `Lexeme of Jsonm.lexeme
        | `White of string ]
      val pp_decode :
        Format.formatter ->
        [< `Await
         | `Comment of [ `M | `S ] * string
         | `End
         | `Error of Jsonm.error
         | `Lexeme of Jsonm.lexeme
         | `White of string ] ->
        unit
      val encode :
        Jsonm.encoder ->
        [< `Await
         | `Comment of [ `M | `S ] * string
         | `End
         | `Lexeme of Jsonm.lexeme
         | `White of string ] ->
        [ `Ok | `Partial ]
    end
end