Unfortunately, I took barely enough grad school classes to be dangerous!  It&#x27;s worth clarifying that the lifting of f through r can change r (to, say r&#x27;), in which case, yes, f is a homomorphism from an algebra with r&#x27; to an algebra with r.  (hopefully I got that right?)<p>I am curious about the idea that the inputs and outputs of r may not need to be of the same type, and want to investigate further (help is appreciated!). Since r is given to reduce(), at least one of its inputs must match its output, depending on how you define reduce(). Haskell&#x27;s fold(l&#x2F;r) permit the non-accumulator side to differ in type from the output, but the output must match the accumulator side.  I think some similar transformation may apply to folds, but haven&#x27;t thought about it enough.