anchor.diff:        return some(new _NonEmptyIMapAVLNode(_k, v, _left, _right));
       }
     }
  +
  +  @override _IMapAVLNode<K, V> modify(Order<K> order, K k, V f(V v), V dflt) {
  +    final Ordering o = order.order(k, _k);
  +    if (o == Ordering.LT) {
  +      final newLeft = _left.modify(order, k, f, dflt);
  +      return new _NonEmptyIMapAVLNode/*<K, V>*/(_k, _v, newLeft, _right)._rebalance();
  +    } else if (o == Ordering.GT) {
  +      final newRight = _right.modify(order, k, f, dflt);
  +      return new _NonEmptyIMapAVLNode/*<K, V>*/(_k, _v, _left, newRight)._rebalance();
  +    } else {
  +      return new _NonEmptyIMapAVLNode(_k, f(_v), _left, _right);
  +    }
  +  }
   }
   
   class _EmptyIMapAVLNode<K, V> extends _IMapAVLNode<K, V> {
  
positive.code:   _IMapAVLNode<K, V> insert(Order<K> order, K k, V v) {
      final Ordering o = order.order(k, _k);
      if (o == Ordering.LT) {
        final _IMapAVLNode<K, V> newLeft = _left.insert(order, k, v);
        return new _NonEmptyIMapAVLNode/*<K, V>*/(_k, _v, newLeft, _right)._rebalance();
      } else if (o == Ordering.GT) {
        final _IMapAVLNode<K, V> newRight = _right.insert(order, k, v);
        return new _NonEmptyIMapAVLNode/*<K, V>*/(_k, _v, _left, newRight)._rebalance();
      } else {
        return new _NonEmptyIMapAVLNode(k, v, _left, _right);
  
negative.code: 
    @override Option<_IMapAVLNode<K, V>> set(Order<K> order, K k, V v) => none();
  
    @override _IMapAVLNode<K, V> modify(Order<K> order, K k, V f(V v), V dflt) => new _NonEmptyIMapAVLNode(k, dflt, emptyIMapAVLNode(), emptyIMapAVLNode());
  
    @override _IMapAVLNode<K, dynamic/*=V2*/> map/*<V2>*/(/*=V2*/ f(V v)) => emptyIMapAVLNode();
  
    @override operator ==(other) => identical(_emptyIMapAVLNode, other);
  
  }
  
  final _IMapAVLNode _emptyIMapAVLNode = new _EmptyIMapAVLNode();
  