anchor.diff:      fun (uri : Uri) ->
       
           let source = string (sourceField.GetValue(uri))
  -        let query = uri.Query
  +        cachedToStringField.SetValue(uri, source)
  +        cachedAbsoluteUriField.SetValue(uri, source)
           let uriInfo = uriInfo uri source
  -
  -        cachedToStringField.SetValue(uri, source)
  -        cachedAbsoluteUriField.SetValue(uri, uriInfo.OriginalHostAndPath + uriInfo.EncodedQueryAndFragments)
           pathField.SetValue(uri, uriInfo.Path)
  -        queryField.SetValue(uri, query)
  +        queryField.SetValue(uri, uriInfo.Query)
   
           uri)
   
  
positive.code: open System
  open System.Reflection
  
  type private UriInfo = 
      { Path : string; 
        Query : string;
        OriginalHostAndPath : string;
        EncodedQueryAndFragments : string }
  
  let private uriInfo (uri : Uri) (source : string) = 
  
  
negative.code:         if fragPos > -1 then source.Substring(queryPos, fragPos - queryPos)
          else if queryPos > -1 then source.Substring(queryPos)
          else ""
      
      { Path = path
        Query = query }
  
  let private privateInstanceFlags = BindingFlags.NonPublic ||| BindingFlags.Instance
  let private publicInstanceFlags = BindingFlags.Public ||| BindingFlags.Instance
  