anchor.diff:  [<System.Diagnostics.DebuggerDisplay("Count = {Count}")>]
   [<Sealed>]
   [<StructuredFormatDisplay("{AsString}")>]
  -type MapExt<[<EqualityConditionalOn>]'Key,[<EqualityConditionalOn;ComparisonConditionalOn>]'Value when 'Key : comparison >(comparer: IComparer<'Key>, tree: MapTree<'Key,'Value>) =
  +type MapExt<[<EqualityConditionalOn>]'Key,[<EqualityConditionalOn;ComparisonConditionalOn>]'Value when 'Key : comparison > internal(comparer: IComparer<'Key>, tree: MapTree<'Key,'Value>) =
   
       static let defaultComparer = LanguagePrimitives.FastGenericComparer<'Key> 
       // We use .NET generics per-instantiation static fields to avoid allocating a new object for each empty
  
positive.code:                 let rec loop () = 
                      let m1 = e1.MoveNext() 
                      let m2 = e2.MoveNext()
                      (m1 = m2) && (not m1 || let e1c, e2c = e1.Current, e2.Current in ((e1c.Key = e2c.Key) && (DefaultEquality.equals e1c.Value e2c.Value) && loop()))
                  loop()
              | _ -> false
  
  
negative.code:         let mutable res = 0
          for (KeyValue(x,y)) in this do
              res <- combineHash res (hash x)
              res <- combineHash res (Unchecked.hash y)
          abs res
  
      override this.Equals(that) = 
  