anchor.diff:  
     /// A standard memoization function
     let memoize f = 
  -      let d = new System.Collections.Generic.Dictionary<_,_>(HashIdentity.Structural)
  +      let d = new Collections.Generic.Dictionary<_,_>(HashIdentity.Structural)
         fun x -> if d.ContainsKey x then d.[x] else let res = f x in d.[x] <- res; res
   
     /// Memoize the objects that manage access to XML files.
  
positive.code:             Debug.WriteLine(sprintf "Worker: Parse completed")
  
              let file = info.File
              let updatedTyped = res
  
              // Construct new typed parse result if the task succeeded
              let newTypedInfo =
                match updatedTyped with
                | TypeCheckSucceeded(results) ->
                    // Handle errors on the GUI thread
                    Debug.WriteLine(sprintf "LanguageService: Update typed info - is some? %A" results.TypeCheckInfo.IsSome)
                    match info.AfterCompleteTypeCheckCallback with 
                    | None -> ()
                    | Some cb -> 
                        Debug.WriteLine (sprintf "Errors: Got update for: %s" (IO.Path.GetFileName(file.FullPath.ToString())))
                        DispatchService.GuiDispatch(fun () -> cb(file, makeErrors results.Errors))
  
                    match results.TypeCheckInfo with
                    | Some(info) -> Some(TypedParseResult(info))
                    | _ -> typedInfo
                | _ -> 
                    Debug.WriteLine("LanguageService: Update typed info - failed")
  
negative.code:         | Some doc -> Tooltips.getTooltip Styles.simpleMarkup doc
      | _ -> String.Empty
  
  
    /// Format some of the data returned by the F# compiler
    ///
    /// If 'canAddHeader' is true (meaning that this is the only tip displayed) then we add first line 
  