This may be a stupid question, but I'm wondering why the following instance isn't in prelude:
instance (Applicative m, Monoid a) => Monoid (m a) where
mempty = pure mempty
mappend a b = mappend <$> a <*> b
?
I ask, because being able to use a WriterT (IO ()) STM a to debug complex STM expressions would be really nice. But it depends upon IO () being a monoid.
Brian