anchor.diff:    final Matcher<S, T> _matcher;
     final Mapper<S, T> _mapper;
   
  -  List<T> _content;
  +  final Map<S, T> _cache = new Map<S, T>();
     bool _isDirty = true;
   
     MappedListView(this._source, this._matcher, this._mapper) {
  
positive.code: typedef bool Matcher<S, T>(S source, T target);
  typedef T Mapper<S, T>(S source);
  
  // TODO: RECYCLE Items!
  // TODO: Be smart about minimal changes
  
  class MappedListView<S, T> extends _UnmodifiableListBase<T> {
  
  
negative.code:     _source.changes.listen(_list_changes);
    }
  
    int get length => _source.length;
  
    T operator[](int index) {
      var sourceValue = _source[index];
      return _cache.putIfAbsent(sourceValue, () => _mapper(sourceValue));
    }
  
    //
    // Implementation
    //
  
    void _list_changes(List<ChangeRecord> changes) {
      var listChanges = changes
          .where((cr) => cr is ListChangeRecord)
          .toList();
  
      if(listChanges.isNotEmpty) {
        ListChangeRecord change = listChanges.single;
        if(change.removedCount > 0) {
          // TODO: in theory, we could be more careful here, but for now
          _cache.clear();
        }
      }
  
      changes.forEach(notifyChange);
    }
  }
  