Writing higher-order reductions