
In response to each of your proposals:
1. Add an instance (Monoid c => Applicative (K1 i c))
This seems like a no-brainer to me. +1
2. Add helpers
gmempty :: (Generic a, Applicative (Rep a)) => a gmempty = to (pure ())
gmappend :: (Generic a, Applicative (Rep a)) => a -> a -> a gmappend a b = to (from a <*> from b)
-- also gpure, gap for generic Applicative
I'm weakly -1 on this. I don't think GHC.Generics should be a place where we collect combinators for generically implementing various type class methods. I'd prefer that these be left to downstream libraries, especially since they're usually extremely straightforward to implement and wouldn't cross the Fairbairn threshold for me.
3. Add Monoid instances
I think I support this idea. But just to be sure we're on the same page: can you say which instances in particular you're adding, and how you'd implement them? Ryan S.