Есть ли стандартная библиотека для решения этой проблемы на Haskell? - PullRequest
5 голосов
/ 20 сентября 2011

Я хочу использовать Data.List.groupBy, чтобы сгруппировать список кортежей на основе равенства элемента snd.
Я мог бы сделать это:

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

Но мне кажется, что это слишком много в функции сравнения - особенно потому, что это могло бы стать намного более запутанным, если бы я делал более сложное сравнение. Я хотел бы сделать что-то вроде:

groupBy (comparing snd) listOfTuples

но сигнатура типа сравнения comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering, поэтому в этом примере она не компилируется.
Я также мог бы сделать:

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

Но это не лучше, чем с первой попытки. Есть ли стандартная библиотека для решения этой проблемы, прежде чем я сделаю это самостоятельно?

Ответы [ 2 ]

15 голосов
/ 20 сентября 2011
groupBy ((==) `on` snd) listOfTuples

Я думаю, что в стандартных библиотеках было equating = on (==), хотя сейчас я не могу его найти.

0 голосов
/ 20 сентября 2011

Это то, что вы хотите?

groupBy ((==EQ) . comparing snd) listOfTuples
...