anchor.diff:  typeclass ReducePipe#( numeric type n, type a);
      module  mkReducePipe#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
   			 PipeOut#(Vector#(n,a)) inpipe)
  -			 (PipeOut#(a) ifc);
  +			 (PipeOut#(a));
      module  mkReducePipes#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
   			  Vector#(n,PipeOut#(a)) inpipe)
  -			  (PipeOut#(a) ifc);
  +			  (PipeOut#(a));
   endtypeclass
   instance ReducePipe#(1, a);
      module  mkReducePipe#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
   				 PipeOut#(Vector#(1,a)) inpipe)
  -				 (PipeOut#(a) ifc);
  +				 (PipeOut#(a));
         let pipe = mapPipe(head, inpipe);
         return pipe;
      endmodule
      module  mkReducePipes#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
   				  Vector#(1,PipeOut#(a)) inpipes)
  -				  (PipeOut#(a) ifc);
  +				  (PipeOut#(a));
         return inpipes[0];
      endmodule
   endinstance
  
positive.code: 
     module  mkReducePipes#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
  			  Vector#(n, PipeOut#(a)) inpipes)
  			 (PipeOut#(a) ifc);
        Vector#(TDiv#(n,2),PipeOut#(a)) pipes0 = takeAt(0, inpipes);
        Vector#(TSub#(n,TDiv#(n,2)),PipeOut#(a)) pipes1 = takeAt(valueOf(TDiv#(n,2)), inpipes);
  
  
negative.code:    endmodule
     module  mkReducePipes#(CombinePipe#(Tuple2#(a,a), a) combinepipe,
  			  Vector#(2,PipeOut#(a)) inpipes)
  			  (PipeOut#(a));
        function a foo(Tuple2#(a,a) invec); 
  	 return combinepipe(invec);
        endfunction
  