anchor.diff:          while i < s.Length && isNumChar(s.[i]) do
               i <- i + 1
           let len = i - start
  -        match TextConversions.AsDecimal cultureInfo (s.Substring(start,len)) with  
  +        match TextConversions.AsDecimal cultureInfo (s.Substring(start,len)) with
           | Some x -> JsonValue.Number x
  -        | _ -> 
  -            match TextConversions.AsFloat [| |] (*useNoneForMissingValues*)false cultureInfo (s.Substring(start,len)) with  
  +        | _ ->
  +            match TextConversions.AsFloat [| |] (*useNoneForMissingValues*)false cultureInfo (s.Substring(start,len)) with
               | Some x -> JsonValue.Float x
               | _ -> throw()
   
  
positive.code:       while i < s.Length && Char.IsWhiteSpace s.[i] do
          i <- i + 1
      let decimalSeparator = cultureInfo.NumberFormat.NumberDecimalSeparator.[0]
      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-------" 
            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()  
  
      // Recursive descent parser for JSON that uses global mutable index
      let rec parseValue() =
  
negative.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()
  
  