anchor.diff:  
   open FileSystemImpl
   type FileSystem (defaultFileSystem : IFileSystem) =
  -    let mutable cnt = 1
  +    let timestamps = new System.Collections.Generic.Dictionary<string, int * System.DateTime>()
  +
       interface IFileSystem with
           member x.FileStreamReadShim fileName = 
               getOpenDocContent fileName
  
positive.code: type Version = int
  
  module FileSystemImpl = 
      let files = new System.Collections.Generic.Dictionary<string, int * System.DateTime>()
      let inline getOpenDoc filename = 
         IdeApp.Workbench.Documents |> Seq.tryFind(fun d -> d.Editor.Document.FileName = filename)
  
      let inline getOpenDocContent (filename: string) =
       //   dumpDocs ()
          match getOpenDoc filename with
          | Some f -> 
             let bytes = System.Text.Encoding.UTF8.GetBytes (f.Editor.Document.Text);
             Some bytes //let m = new System.IO.MemoryStream(bytes)
             //Some (m :> Stream) 
          | _ -> None
  
      let inline getOrElse f o = 
  
negative.code:             let r = maybe {
                 let! doc = FileSystemImpl.getOpenDoc fileName
                 if doc.IsDirty then
                   let key, newhash = fileName, doc.Editor.Text.GetHashCode()
                   return match timestamps.TryGetValue (key) with
                          | true, (hash, date) when hash = newhash -> date
                          | _       -> let d = System.DateTime.Now
                                       timestamps.[key] <- (newhash,d)
                                       d
                 else return! None
               }
              getOrElse (fun () -> defaultFileSystem.GetLastWriteTimeShim fileName) r
  