For the Map-Reduce transformation, you require f(r(a,b)) = r(f(a),f(b)). This is equivalent to requiring r to be a homomorphism, I think.<p>You could probably generalize that condition to situations where f can be lifted over the output of r so you don&#x27;t have to require that r&#x27;s output type is the same as its input.