anchor.diff:          // if both lists have child with the same key, then just diff them,
           // otherwise return patch with [a] child removed and [b] child
           // inserted
  -        final aNode = a.first;
  -        final bNode = b.first;
  +        final VNode aNode = a.first;
  +        final VNode bNode = b.first;
   
           if ((aNode.key == null && aNode.sameType(bNode)) ||
               aNode.key != null && aNode.key == bNode.key) {
  
positive.code:             }
            }
          } else {
            // [a] child position
            // if it is -1, then the child is removed
            var unchangedPosition = -1;
  
            for (var i = 0; i < b.length; i++) {
              final bNode = b[i];
              if (aNode.key == bNode.key) {
                unchangedPosition = i;
                break;
              } else {
                parent.insertChild(bNode, aNode, context, attached);
              }
            }
  
            if (unchangedPosition != -1) {
              for (var i = unchangedPosition + 1; i < b.length; i++) {
                parent.insertChild(b[i], null, context, attached);
              }
              aNode.update(b[unchangedPosition], context);
            } else {
              parent.removeChild(aNode, attached);
            }
          }
        } else if (b.length == 1) {
  
negative.code: 
          // implicit keys
          if (bNode.key == null) {
            int i = 0;
            bool updated = false;
            while (i < a.length) {
              final VNode aNode = a[i++];
              if (aNode.sameType(bNode)) {
                aNode.update(bNode, context);
                updated = true;
  