anchor.diff:    bool _isCons() => false;
     A _unsafeHead() => throw new UnsupportedError("_unsafeHead called on _Nil");
     IList<A> _unsafeTail() => throw new UnsupportedError("_unsafeTail called on _Nil");
  +  void _unsafeSetTail(IList<A> newTail) => throw new UnsupportedError("_unsafeSetTail called on _Nil");
   
     @override Option<A> get headOption => none();
   
  
positive.code: 
  class Cons<A> extends IList<A> {
    final A _head;
    final IList<A> _tail;
    bool _isCons() => true;
    A _unsafeHead() => _head;
    IList<A> _unsafeTail() => _tail;
  
    Cons(this._head, this._tail);
  
  
negative.code: part of dartz;
  
  // Internally implemented using imperative loops and mutations, for stack safety and performance.
  // The external API should be safe and referentially transparent, though.
  
  abstract class IList<A> extends TraversableOps<IList, A> with FunctorOps<IList, A>, ApplicativeOps<IList, A>, ApplicativePlusOps<IList, A>, MonadOps<IList, A>, MonadPlusOps<IList, A>, TraversableMonadOps<IList, A>, TraversableMonadPlusOps<IList, A> {
    Option<A> get headOption;
  