anchor.diff:  
     dynamic get first {
       if (length > 0) return this[0];
  -    throw new StateError("No elements");
  +    throw IterableElementError.noElement();
     }
   
     dynamic get last {
       if (length > 0) return this[length - 1];
  -    throw new StateError("No elements");
  +    throw IterableElementError.noElement();
     }
   
     dynamic get single {
       if (length == 1) return this[0];
  -    if (length == 0) throw new StateError("No elements");
  -    throw new StateError("More than one element");
  +    if (length == 0) throw IterableElementError.noElement();
  +    throw IterableElementError.tooMany();
     }
   
     void removeRange(int start, int end) {
  
positive.code:   }
  
    String join([String separator = ""]) {
      return IterableMixinWorkaround.join(this, separator);
    }
  
    dynamic reduce(dynamic combine(value, element)) {
      return IterableMixinWorkaround.reduce(this, combine);
    }
  
    dynamic fold(dynamic initialValue,
                 dynamic combine(dynamic initialValue, element)) {
      return IterableMixinWorkaround.fold(this, initialValue, combine);
    }
  
    Iterable map(f(element)) {
      return IterableMixinWorkaround.mapList(this, f);
    }
  
    Iterable expand(Iterable f(element)) {
      return IterableMixinWorkaround.expand(this, f);
    }
  
    bool every(bool f(element)) {
      return IterableMixinWorkaround.every(this, f);
    }
  
    bool any(bool f(element)) {
      return IterableMixinWorkaround.any(this, f);
    }
  
    dynamic firstWhere(bool test(element), {orElse()}) {
      return IterableMixinWorkaround.firstWhere(this, test, orElse);
    }
  
    dynamic lastWhere(bool test(element), {orElse()}) {
      return IterableMixinWorkaround.lastWhereList(this, test, orElse);
    }
  
    dynamic singleWhere(bool test(element)) {
      return IterableMixinWorkaround.singleWhere(this, test);
    }
  
    dynamic elementAt(int index) {
  
negative.code:   }
  
    void sort([int compare(a, b)]) {
      if (compare == null) compare = Comparable.compare;
      Sort.sort(this, compare);
    }
  
    void shuffle([Random random]) {
      if (random == null) random = new Random();
      var i = this.length;
      while (i > 1) {
        int pos = random.nextInt(i);
        i -= 1;
        var tmp = this[i];
        this[i] = this[pos];
        this[pos] = tmp;
      }
    }
  
    int indexOf(element, [int start = 0]) {
      return Lists.indexOf(this, element, start, this.length);
    }
  
    int lastIndexOf(element, [int start = null]) {
      if (start == null) start = this.length - 1;
      return Lists.lastIndexOf(this, element, start);
    }
  
    void clear() {
  