anchor.diff:  
     @override Option<Tuple3<_IMapAVLNode<K, V>, K, V>> _removeMax() => none();
   
  -  @override Option<_IMapAVLNode<K, V>> set(Order<K> order, K k, V v) => none();
  +  @override _IMapAVLNode<K, V> setIfPresent(Order<K> order, K k, V v) => this;
   
     @override _IMapAVLNode<K, V> modify(Order<K> order, K k, V f(V v), V dflt) => new _NonEmptyIMapAVLNode(k, dflt, emptyIMapAVLNode(), emptyIMapAVLNode());
   
  
positive.code: }
  
  IMap/*<K, V>*/ imap/*<K, V>*/(Map/*<K, V>*/ m) => new IMap.from(m);
  IMap/*<K, V>*/ imapWithOrder/*<K, V>*/(Order/*<K>*/ o, Map/*<K, V>*/ m) => new IMap.fromWithOrder(o, m);
  IMap/*<K, V>*/ emptyMap/*<K, V>*/() => new IMap.empty();
  IMap/*<K, V>*/ singletonMap/*<K, V>*/(/*=K*/ k, /*=V*/ v) => new IMap/*<K, V>*/.empty().put(k, v);
  
  
negative.code:     return new _NonEmptyIMapAVLNode/*<K, V2>*/(_k, newV, newLeft, newRight);
    }
  
    @override _IMapAVLNode<K, V> setIfPresent(Order<K> order, K k, V v) {
      final Ordering o = order.order(k, _k);
      if (o == Ordering.LT) {
        final newLeft = _left.setIfPresent(order, k, v);
        return identical(newLeft, _left) ? this : new _NonEmptyIMapAVLNode(_k, _v, newLeft, _right);
      } else if (o == Ordering.GT) {
        final newRight = _right.setIfPresent(order, k, v);
        return identical(newRight, _right) ? this : new _NonEmptyIMapAVLNode(_k, _v, _left, newRight);
      } else {
        return new _NonEmptyIMapAVLNode(_k, v, _left, _right);
      }
    }
  
  