anchor.diff:        endmethod
      endinterface
      interface PipeOut ivpipe;
  -      method IteratorValue#(a) first();
  -	 return IteratorValue { value: x, first: first, last: last };
  +      method IteratorValue#(a,c) first();
  +	 return IteratorValue { value: x, first: first, last: last, ctxt: ctxtReg };
         endmethod
         method Action deq if (!idle);
   	 let next_x = x + xstep;
  
positive.code:    function PipeOut#(Vector#(n, a)) toPipeOut(Gearbox#(m, n, a) in);
        return (interface PipeOut#(Vector#(n,a));
  		 method first = in.first;
  		 method deq = in.deq;
  		 method notEmpty = in.notEmpty;
  	      endinterface);
  
negative.code:    a value;
     Bool first;
     Bool last;
     b ctxt;
  } IteratorValue#(type a, type b) deriving (Bits);
  
  interface IteratorWithContext#(type a, type c);
     interface PipeOut#(a) pipe;
     interface PipeOut#(IteratorValue#(a,c)) ivpipe;
     method a count();
     method Bool isFirst();
     method Bool isLast();
  