use Reduction.apply