anchor.diff:      member x.Expected       = filter expected
       member x.Unexpected     = filter unexpected
   
  -open Details
  +open ParserDetails
   
   /// Attempts to parse a JSON document from a string
   ///   visitor : Parser visitor object
   ///   input   : Input string
  -let tryParse (visitor : IParseVisitor) (input : string) (pos : byref<int>) : bool =
  -  let sb = StringBuilder DefaultSize
  -  consume_WhiteSpace                input &pos
  -  && tryParse_RootValue sb  visitor input &pos
  -  && tryParse_Eos           visitor input &pos
  +let tryParse (visitor : IParseVisitor) (input : string) (pos : int byref) : bool =
  +  let jp = JsonParser (input, visitor)
  +  let result =
  +    jp.consume_WhiteSpace     ()
  +    && jp.tryParse_RootValue  ()
  +    && jp.tryParse_Eos        ()
  +
  +  pos <- jp.position
  +
  +  result
   
   /// Returned by parse function
   type ParseResult =
  
positive.code:   [<Literal>]
    let NewLine   = "NEWLINE"
  
  /// Represents a JSON document
  type Json =
    /// ()         - Represents a JSON null value
  
negative.code:       let e = s.Length - 1
        for i = 0 to e do
          match s.[i] with
          | '\"'            -> str @"\"""
          | '\\'            -> str @"\\"
          | '/'             -> str @"\/"
          | c when c < ' '  -> str ToStringDetails.nonPrintableChars.[int c]
          | c               -> ch c
        ch '"'
  
      let values b e (vs : 'T array) (a : 'T -> unit) =
  