Chcę użyć Data.List.groupBy do zgrupowania listy krotek na podstawie równości elementu snd
.
mogę to zrobić:Czy istnieje standardowe rozwiązanie biblioteki do tego problemu Haskell?
groupBy (\l r -> snd l == snd r) listOfTuples
Ale wydaje mi się zbyt dużo boilerplate w funkcji porównania - szczególnie, ponieważ może dostać dużo bardziej niechlujny jakbym robi bardziej skomplikowane porównania. Chciałbym zrobić coś takiego:
groupBy (comparing snd) listOfTuples
ale podpis typu porównanie jest comparing :: (Ord a) => (b -> a) -> b -> b -> Ordering
, więc nie skompilować w tym przykładzie.
mogłem również zrobić:
groupBy (\l r -> (comparing snd l r) == EQ) listOfTuples
Ale to nie jest lepiej niż za pierwszym razem. Czy istnieje rozwiązanie oparte na standardowej bibliotece tego problemu, zanim uruchomię swoje własne?
Z jakiego pakietu pochodzi 'na'? –
@Matt: Data.Function (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Function.html#v:on) ogólnie możesz szukać funkcji w hoogle: http://www.haskell.org/hoogle/?hoogle=on – porges
@Porges: thanks! –