anchor.diff:     module [Module] mkReducePipe (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
   				 PipeOut#(Vector#(1,a)) inpipe,
   				 PipeOut#(a) ifc);
  -      let pipe <- mkMap(head, inpipe);
  +      let pipe = mapPipe(head, inpipe);
         return pipe;
  +   endmodule
  +   module [Module] mkReducePipes (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  +				  Vector#(1,PipeOut#(a)) inpipes,
  +				  PipeOut#(a) ifc);
  +      return inpipes[0];
      endmodule
   endinstance
   instance ReducePipe#(2, a);
  
positive.code: 				 PipeOut#(Vector#(2,a)) inpipe,
  				 PipeOut#(a) ifc);
        function Tuple2#(a,a) foo(Vector#(2,a) invec); return tuple2(invec[0], invec[1]); endfunction
        PipeOut#(Tuple2#(a,a)) zippipe <- mkMap(foo, inpipe);
        let pipe <- combinepipe(zippipe);
        return pipe;
     endmodule
     module [Module] mkReducePipes (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  				  Vector#(2,PipeOut#(a)) inpipes,
  				  PipeOut#(a) ifc);
        PipeOut#(Tuple2#(a,a)) zippipe = (interface PipeOut#(Tuple2#(a,a));
  				       method Tuple2#(a,a) first(); return tuple2(inpipes[0].first(), inpipes[1].first()); endmethod
  				       method Action deq(); inpipes[0].deq(); inpipes[1].deq(); endmethod
  				       method Bool notEmpty(); return inpipes[0].notEmpty && inpipes[1].notEmpty(); endmethod
  				       endinterface);
        let pipe <- combinepipe(zippipe);
        return pipe;
     endmodule
  endinstance
  
negative.code:       PipeOut#(a) p0 <- mkReducePipe(combinepipe, inpipe0);
        PipeOut#(a) p1 <- mkReducePipe(combinepipe, inpipe1);
  
        PipeOut#(a) outpipe <- combinepipe(zipPipeOut(p0, p1));
        return outpipe;
     endmodule
  
  