anchor.diff:  
           interface IDisposable with
               member x.Dispose() = x.Dispose()
  - 
  +
  +
  +
       /// <summary>
       /// A reader representing "map" operations
       /// NOTE that the reader actually takes a function "a -> list&lt;b&gt;" instead of the
  
positive.code:             // if the reader is currently outdated add it to the
              // dirty set immediately
              lock r (fun () -> 
                  if r.OutOfDate 
                  then lock dirty (fun () -> dirty.Add r |> ignore)
              )
              
          /// <summary>
          /// Stops "listening" to changes of a certain reader
          /// </summary>
          member x.Destroy(r : IReader<'a>) =
              // if there exists a subscription we remove and dispose it
              match subscriptions.TryGetValue r with
                  | (true, d) -> 
                      subscriptions.Remove r |> ignore
                      d()
                  | _ -> ()
  
              // if the reader is already in the dirty-set remove it from there too
  
negative.code:         member x.Listen(r : IReader<'a>) =
              // create and register a callback function
              let onMarking () = 
                  lock dirty (fun () -> dirty.Add r |> ignore )
                  subscriptions.TryRemove r |> ignore
  
  
              r.MarkingCallbacks.Add onMarking |> ignore
  
  