During the last Algebra of Programming meeting we were talking about idioms (applicative functors), monads, traversals, and such. At one moment a definition of **idiom morphism** appeared on the whiteboard, which is a function (a brave person might even say `natural transformation’) of type (for applicative `M`

and `N`

)

f :: M a -> N a

which respects the following:

f . pure = pure f (mf <*> mx) = f mf <*> f mx

I was wondering: Sometimes it is the case that homomorphisms of simpler algebraic structures (for example, monoids) are authomatically homomorphisms of more complicated structures (for example, groups).