anchor.diff:  		end;
   	end;
   
  +	procedure List.erase(p: Iterator);
  +	var
  +		prevIt, nextIt: Iterator;
  +	begin
  +		if p = tail then
  +			exit();
  +		if p = head then
  +		begin
  +			prevIt := head;
  +			head := head.next();
  +			prevIt.destroy();
  +		end
  +		else
  +		begin
  +			prevIt := p.prev();
  +			nextIt := p.next();
  +			p.destroy();
  +			prevIt.setNext(nextIt);
  +			nextIt.setPrev(prevIt);
  +		end;
  +	end;
  +	
   	function List.start(): Iterator;
   	begin
   		start := head;
  
positive.code: 			nextIt, prevIt: Iterator;
  
  		public
  			constructor create(it: pint);
  
  			function next(): Iterator;
  			function prev(): Iterator;
  
negative.code: 			function empty(): boolean;
  
  			procedure push_back(element: longInt);
  			function  pop_back(): longInt;
  			procedure insert(p: Iterator; element: longInt);
  			procedure erase(p: Iterator);
  		end;
  
  implementation
  	constructor Iterator.create(element: longInt);
  	begin
  		new(raw_data);
  		raw_data^ := element;
  	end;
  
  	destructor Iterator.destroy();
  	begin
  		dispose(raw_data);
  	end;
  
  	function Iterator.next(): Iterator;
  