anchor.diff:                  |> Map.toSeq
                   |> Seq.map snd
                   |> Seq.collect (fun x -> Seq.append (x.TypeDef :> TypeDef |> Seq.singleton) (x.Args |> Seq.map (fun a -> upcast a.TypeDef)))
  -                |> Seq.map (fun x -> match named x with Some n -> n | _ -> failwith "Expected a Named type!")
  +                |> Seq.map asNamed
                   |> Seq.filter (fun x -> not (map.ContainsKey(x.Name)))
                   |> Seq.iter insert
                   odef.Implements
  
positive.code:             then map.Add(name, def)
              elif overwrite
              then map.[name] <- def
          let rec insert (def : NamedDef) =
              match def with
              | :? ScalarDef as sdef -> add sdef.Name def overwrite
  
negative.code:                 add sdef.Name def overwrite
                  sdef.Fields
                  |> Map.toSeq
                  |> Seq.map snd
                  |> Seq.collect (fun x -> Array.append [| x.OutputTypeDef :> TypeDef |] (x.Args |> Array.map (fun a -> upcast a.TypeDef)))
                  |> Seq.map asNamed
                  |> Seq.filter (fun x -> not (map.ContainsKey(x.Name)))
                  |> Seq.iter insert
              | :? ObjectDef as odef ->
  