anchor.diff:  final Monoid<IMap> IMapMi = imapMonoid(secondSemigroup);
   
   final Traversable<IMap> IMapTr = new TraversableOpsTraversable<IMap>();
  -
  -
  -abstract class _IMapAVLNode<K, V> {
  -  const _IMapAVLNode();
  +final Foldable<IMap> IMapFo = IMapTr;
  +final Functor<IMap> IMapF = IMapTr;
  +
  +
  +abstract class _IMapAVLNode<K, V> extends FunctorOps<_IMapAVLNode, V> {
  +  _IMapAVLNode();
   
     _IMapAVLNode<K, V> insert(Order<K> order, K k, V v);
     _IMapAVLNode<K, V> remove(Order<K> order, K k);
  
positive.code:   Option<V> get(K k) => _tree.get(_order, k);
  
    IMap<K, V> modify(K k, V f(V v), V dflt) => put(k, get(k).map(f)|dflt);
  
    IMap<K, V> remove(K k) => new IMap(_order, _tree.remove(_order, k));
  
  
negative.code:   int get height;
    int get balance;
    Option<Tuple3<_IMapAVLNode<K, V>, K, V>> _removeMax();
    Option<_IMapAVLNode<K, V>> set(Order<K> order, K k, V v);
  }
  
  class _NonEmptyIMapAVLNode<K, V> extends _IMapAVLNode<K, V> {
  