anchor.diff:      out.write("<span data-path=${id}>${HTML_ESCAPE.convert(value)}</span>");
     }
   
  +  void unmount() {}
  +
     Map<Symbol,dynamic> get props => {#value: value};
   }
   
  
positive.code:   #onClick: {}
  };
  
  abstract class View {
    String _id;
    int _depth;
    View();
  
    void mount(StringBuffer out, String id, int depth) {
      _id = id;
      _depth = depth;
    }
  
    Map<Symbol,dynamic> get props;
  }
  
negative.code:     shadow.mount(out, id, depth);
    }
  
    void unmount() {
      shadow.unmount();
    }
  
    View render();
  
    void refresh() {
      assert(_path != null);
  
      if (_nextState != null) {
        _state = _nextState;
        _nextState = null;
      }
  
      Element before = querySelector("[data-path=\"${_path}\"]");
  
      shadow.unmount();
      shadow = render();
      StringBuffer out = new StringBuffer();
      shadow.mount(out, _path, _depth);
      Element after = _unsafeNewElement(out.toString());
  
      before.replaceWith(after);
  