anchor.diff:              then 
                   let m = cache.CreateCacheEntryChangeMonitor [ key ]
                   m.NotifyOnChanged(fun _ -> 
  -                    if not clearingCache 
  -                    then 
  -                        clearCache()
  -                        this.Invalidate()
  +                    x.ClearCache()
  +                    invalidate()
                   )
                   changeMonitors.Add(m)
                   value 
  
positive.code:         |> Seq.toArray
          |> Array.iter (cache.Remove >> ignore)
  
      let cacheGetOrAdd(key, value: Lazy<ProvidedTypeDefinition>, monitors) = 
          let policy = CacheItemPolicy()
          monitors |> Seq.iter policy.ChangeMonitors.Add
          let existing = cache.AddOrGetExisting(key, value, policy)
  
negative.code:             parameters = parameters,             
              instantiationFunction = fun typeName args ->
                  let typ, monitors = this.CreateRootType(assembly, nameSpace, typeName, args)
                  cache.CacheGetOrAdd(typeName, typ, monitors |> Seq.cast, this.Invalidate)
          )
  
          this.AddNamespace( nameSpace, [ providerType ])
  
      do
          this.Disposing.Add <| fun _ -> (cache :> IDisposable).Dispose()
  
      abstract CreateRootType: assemblyName: Assembly * nameSpace: string * typeName: string  * args: obj[] -> Lazy<ProvidedTypeDefinition> * obj[] // ChangeMonitor[] underneath but there is a problem https://github.com/fsprojects/FSharp.Data.SqlClient/issues/234#issuecomment-240694390
  