anchor.diff:      { typedInfo : TypeCheckResults option
         contents : string }
   
  -type ParseInfoCache(project:Project) as self =
  +type ParseInfoCache(project:Project, initialLazyTypedInfos) as self =
       let checker, options = Ast.getCheckerAndOptions project.Files
       let lazyUntypedInfos = new Dictionary<string,Lazy<UntypedInfo>>()
       let lazyTypedInfos = new Dictionary<string,Lazy<TypedInfo>>()
  
positive.code:         if typedInfo.contents = project.GetContents filename then typedInfo.typedInfo
          else
              let newLazyTypedInfo = getLazyTypedInfo filename
              lazyTypedInfos.[filename] = newLazyTypedInfo |> ignore
              newLazyTypedInfo.Force().typedInfo
              
          
  and Project(currentFile:string, filesAndContents:(string * string option) array, updatedFiles:Set<string>) as self =
      let currentFile = Path.GetFullPath currentFile
      let getIndex filename = Seq.findIndex ((=) filename) self.Files
      let parseInfoCache = lazy (new ParseInfoCache(self))
  
      new(currentFile:string, filesAndContents:(string * string option) array) =
          Project(currentFile, filesAndContents, Set.empty)
  
      new(source:string, filename:string) =
          Project(filename, [|filename, Some source|])
          
  
negative.code:         else
              checker.StartBackgroundCompile options
              let newLazyUntypedInfo = getLazyUntypedInfo filename
              lazyUntypedInfos.[filename] <- newLazyUntypedInfo
              newLazyUntypedInfo.Force()
  
      member self.UntypedInfo filename =
  