Search code examples
haskellfunctional-programmingstandard-library

Is there a standard library solution to this Haskell problem?


I want to use Data.List.groupBy to group a list of tuples based on the equality of the snd element.
I could do this:

groupBy (\l r -> snd l == snd r) listOfTuples

But it strikes me as too much boilerplate in the comparison function -- especially because it could get a lot more messy if I were doing a more complicated comparison. I would like to do something like:

groupBy (comparing snd) listOfTuples

but the type signature of comparing is comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering, so it doesn't compile in this example.
I could also do:

groupBy (\l r -> (comparing snd l r) == EQ) listOfTuples

But this is no better than the first try. Is there a standard-library solution to this problem, before I roll-my-own?


Solution

  • groupBy ((==) `on` snd) listOfTuples
    

    I think there used to be equating = on (==) in the standard libraries, though I can't seem to find it now.