I think the `By` functions that expect a Bool are all cumbersome because they are too flexible. 100% of the time I personally use these functions I want to use Ord or Eq.
What I would like to see is a function groupOn next to groupBy.
groupOn :: Eq b => (a -> b) -> [a] -> [[a]]
Then equating is no longer needed, and one just writes: groupOn snd
I believe this style also gives better opportunity for optimization (Scwartzian transform).
Of course, this function is still problematic because it operates only on lists and does not group over the entire list, but those are separate issues.
All of this is solved in mono-traversable right now by the groupAllOn function [1]