Consequently, we're looking at removing mapM entirely from the class and just making it a top level definition.
To do that we'd need to deprecate redefinition of the method in instances for a version or two. This would need a new form of deprecation, where you deprecate redefinition but not use of a member of a class. (I think Herbert filed an issue to create it, but I can't find it off hand.)
Once we can make that transition, then the constraints on mapM would relax to the same as those for traverse. That would fix both the constraints and the implementation going forward for everything, but we should probably handle this particular case first or you won't see any benefit for a couple of years.
-Edward