anchor.diff:  					method notEmpty(); return p0.notEmpty() && p1.notEmpty(); endmethod
   					endinterface);
         PipeOut#(a) outpipe <- combinepipe(tplpipe);
  +      return outpipe;
  +   endmodule
  +
  +   module [Module] mkReducePipes (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  +				  Vector#(n, PipeOut#(a)) inpipes,
  +				 PipeOut#(a) ifc);
  +      Vector#(TDiv#(n,2),PipeOut#(a)) pipes0 = takeAt(0, inpipes);
  +      Vector#(TDiv#(n,2),PipeOut#(a)) pipes1 = takeAt(valueOf(TDiv#(n,2)), inpipes);
  +
  +      PipeOut#(a) p0 <- mkReducePipes(combinepipe, pipes0);
  +      PipeOut#(a) p1 <- mkReducePipes(combinepipe, pipes1);
  +
  +      PipeOut#(a) outpipe <- combinepipe(zipPipeOut(p0, p1));
         return outpipe;
      endmodule
   endinstance
  
positive.code: 				 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
  
negative.code:    module [Module] mkReducePipe (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  				 PipeOut#(Vector#(n,a)) inpipe,
  				 PipeOut#(a) ifc);
     module [Module] mkReducePipes (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  				  Vector#(n,PipeOut#(a)) inpipe,
  				  PipeOut#(a) ifc);
  endtypeclass
  instance ReducePipe#(1, a);
     module [Module] mkReducePipe (PipeOutConstructor#(Tuple2#(a,a), a) combinepipe,
  