@Matthew -- re:

> while `Maybe a` is not necessarily a monoid, `Maybe [a]` *is*

This seems to be a special case of a more general result, namely that if `Moo` is a monoid, then we can define a canonical monoid structure on `Maybe Moo`.

The unit is `Nothing`, and we define `(Just x) <> (Just y)` to be `Just (x <> y)`.

`Just`here is a good example of a semigroup homomorphism between monoids that isn't a monoid homomorphism (because it doesn't preserve the unit).

> while `Maybe a` is not necessarily a monoid, `Maybe [a]` *is*

This seems to be a special case of a more general result, namely that if `Moo` is a monoid, then we can define a canonical monoid structure on `Maybe Moo`.

The unit is `Nothing`, and we define `(Just x) <> (Just y)` to be `Just (x <> y)`.

`Just`here is a good example of a semigroup homomorphism between monoids that isn't a monoid homomorphism (because it doesn't preserve the unit).