module Uncut:Codec with comments and whitespace.sig..end
    The uncut codec also processes whitespace and JavaScript
    comments. The latter is non-standard JSON, fail on `Comment
    decoding if you want to process whitespace but stick to the standard.
    The uncut codec preserves as much of the original input as
    possible. Perfect round-trip with Jsonm is however impossible for 
    the following reasons:
    
':' and
       value separators ",". If you just reencode the sequence of 
       decodes, whitespace and comments may (harmlessly, but significantly) 
       commute with these separators.U+000A ('\n') for newlines.`Float lexemes may be rewritten differently by the encoder.The uncut data model is the same as the regular data model, except that before or after any lexeme you may decode/encode one or more:
`White w, representing JSON whitespace w. On input 
         the sequence CR (U+000D) and CRLF (<U+000A, U+000A>)
         are normalized to U+000A. The string w must be
         a sequence of U+0020, U+0009, U+000A or U+000D 
         characters (' ', '\t', '\n', '\r').`Comment (`S, c), representing a JavaScript single line 
      comment c. c is the comment's content without the starting 
      // and the ending newline. The string c must not contain any newline.
      `Comment (`M, c), representing a JavaScript multi-line 
      comment c. c is the comment's content without the starting 
      /* and the ending */. The string c must not contain the 
      sequence */. 
      Warning. Jsonm.Uncut.encode does not check the above constraints on 
      w and c.
Decode
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 ] ->
       unitpp_decode ppf v prints an unspecified representation of v 
      on ppf.val encode : Jsonm.encoder ->
       [< `Await
        | `Comment of [ `M | `S ] * string
        | `End
        | `Lexeme of Jsonm.lexeme
        | `White of string ] ->
       [ `Ok | `Partial ]encode is like Jsonm.encode but for the 
      uncut data model.
      IMPORTANT. Never encode `Comment for the web, it is 
      non-standard and breaks interoperability.