anchor.diff:        while i < s.Length && Char.IsWhiteSpace s.[i] do
           i <- i + 1
       let decimalSeparator = cultureInfo.NumberFormat.NumberDecimalSeparator.[0]
  -    let isNumChar c = 
  +    let isNumChar c =
         Char.IsDigit c || c=decimalSeparator || c='e' || c='E' || c='+' || c='-'
  -    let throw() = 
  -      let msg = 
  -        sprintf 
  -          "Invalid Json starting at character %d, snippet = \n----\n%s\n-----\njson = \n------\n%s\n-------" 
  +    let throw() =
  +      let msg =
  +        sprintf
  +          "Invalid Json starting at character %d, snippet = \n----\n%s\n-----\njson = \n------\n%s\n-------"
             i (jsonText.[(max 0 (i-10))..(min (jsonText.Length-1) (i+10))]) (if jsonText.Length > 1000 then jsonText.Substring(0, 1000) else jsonText)
         failwith msg
  -    let ensure cond = 
  -      if not cond then throw()  
  +    let ensure cond =
  +      if not cond then throw()
   
       // Recursive descent parser for JSON that uses global mutable index
       let rec parseValue() =
  
positive.code:         r
  
      // Start by parsing the top-level value
      member x.Parse() = 
          let value = parseRootValue()
          skipWhitespace()
          if i <> s.Length then
              throw()
          value
  
      member x.ParseMultiple() = 
          seq {
              while i <> s.Length do
                  yield parseRootValue()
                  skipWhitespace() 
          }
  
  type JsonValue with
  
    /// Parses the specified JSON string
    static member Parse(text, ?cultureInfo) = 
      JsonParser(text, cultureInfo, false).Parse()
  
    /// Loads JSON from the specified stream
    static member Load(stream:Stream, ?cultureInfo) = 
      use reader = new StreamReader(stream)
      let text = reader.ReadToEnd()
      JsonParser(text, cultureInfo, false).Parse()
  
    /// Loads JSON from the specified reader
    static member Load(reader:TextReader, ?cultureInfo) = 
      let text = reader.ReadToEnd()
      JsonParser(text, cultureInfo, false).Parse()
  
  
negative.code: 
  /// Specifies the formatting behaviour of JSON values
  [<RequireQualifiedAccess>]
  type JsonSaveOptions =
    /// Format (indent) the JsonValue
    | None = 0
    /// Print the JsonValue in one line in a compact way
    | DisableFormatting = 1
  
  /// Represents a JSON value. Large numbers that do not fit in the
  /// Decimal type are represented using the Float case, while
  /// smaller numbers are represented as decimals to avoid precision loss.
  [<RequireQualifiedAccess>]
  type JsonValue =
    | String of string
    | Number of decimal
    | Float of float
    | Record of properties:(string * JsonValue)[]
    | Array of elements:JsonValue[]
    | Boolean of bool
  