anchor.diff:  
   interface IteratorIfc#(type a);
      interface PipeOut#(a) pipe;
  +   interface PipeOut#(IteratorValue#(a)) ivpipe;
      method a count();
      method Bool isFirst();
      method Bool isLast();
  
positive.code:    a xstep;
  } IteratorConfig#(type a) deriving (Bits, FShow);
  
  interface IteratorWithContext#(type a, type c);
     interface PipeOut#(a) pipe;
     method a count();
     method Bool isFirst();
     method Bool isLast();
  
negative.code: module mkIterator(IteratorIfc#(a)) provisos (Arith#(a), Bits#(a,awidth), Eq#(a), Ord#(a));
     IteratorWithContext#(a,void) iter <- mkIteratorWithContext();
     interface PipeOut pipe = iter.pipe;
     interface PipeOut ivpipe = iter.ivpipe;
     method Action start(IteratorConfig#(a) cfg);
        iter.start(cfg, ?);
     endmethod
  