我想使用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
但这并不比第一次尝试好。在我滚动自己之前,是否有针对此问题的标准库解决方案?
答案 0 :(得分:15)
groupBy ((==) `on` snd) listOfTuples
我认为标准库中曾经有equating = on (==)
,但我现在似乎无法找到它。
答案 1 :(得分:-1)
这是你想要的吗?
groupBy ((==EQ) . comparing snd) listOfTuples