anchor.diff:  open System
   open Microsoft.FSharp.Collections
   
  -//todo: rename IEye?
   ///Specifies a watch viewer interface, an instance which can add or update one or more watches with 
   ///a custom watch viewer control
   type IWatchViewer =
  
positive.code:         
          watchUpdated.Trigger(mwv)
  
      ///Remove the managed watch viewer by id
      member this.RemoveManagedWatchViewer(id:string) =
          let mwv = managedWatchViewers |> Seq.find(fun x -> x.ID = id)
          managedWatchViewers.Remove(mwv) |> ignore
          
          watchRemoved.Trigger(mwv)
  
      ///Remove the managed plugin (and all of its managed watch viewers) by name
      member this.RemoveManagedPlugin(name:string) =
          let mp = managedPlugins |> Seq.find(fun x -> x.Plugin.Name = name)
          
          managedWatchViewers 
          |> Seq.filter (fun x -> x.ManagedPlugin = mp) 
          |> Seq.toList
          |> Seq.iter (fun x -> this.RemoveManagedWatchViewer(x.ID))
  
          absoluteCounts.Remove(mp) |> ignore
          managedPlugins.Remove(mp) |> ignore
  
      ///Register the given plugin, removing a managed plugin of the same name if it exists,
      ///and return the managed plugin wrapping it.
      member this.RegisterPlugin(plugin:IPlugin) =
          if managedPlugins |> Seq.exists (fun x -> x.Plugin.Name = plugin.Name) then
              this.RemoveManagedPlugin(plugin.Name)
               
          let mp = {Plugin=plugin; PluginManager=this}
          managedPlugins.Add(mp)
  
negative.code:     ManagedPlugin:ManagedPlugin
  }
  
  ///Represents a plugin being managed by the PluginManager
  and ManagedPlugin = {
      ///The plugin being managed
  