Reputation: 49085
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?
Upvotes: 5
Views: 191
Reputation: 1598
Is this what you want?
groupBy ((==EQ) . comparing snd) listOfTuples
Upvotes: -1
Reputation: 152707
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.
Upvotes: 15