summaryrefslogtreecommitdiff
path: root/compiler/GHC/Data/List/SetOps.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Data/List/SetOps.hs')
-rw-r--r--compiler/GHC/Data/List/SetOps.hs6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/GHC/Data/List/SetOps.hs b/compiler/GHC/Data/List/SetOps.hs
index 99bf2fe903..5aff54c949 100644
--- a/compiler/GHC/Data/List/SetOps.hs
+++ b/compiler/GHC/Data/List/SetOps.hs
@@ -18,7 +18,7 @@ module GHC.Data.List.SetOps (
Assoc, assoc, assocMaybe, assocUsing, assocDefault, assocDefaultUsing,
-- Duplicate handling
- hasNoDups, removeDups, nubOrdBy, findDupsEq,
+ hasNoDups, removeDups, removeDupsOn, nubOrdBy, findDupsEq,
equivClasses,
-- Indexing
@@ -37,6 +37,7 @@ import GHC.Utils.Misc
import qualified Data.List as L
import qualified Data.List.NonEmpty as NE
import Data.List.NonEmpty (NonEmpty(..))
+import Data.Ord (comparing)
import qualified Data.Set as S
getNth :: Outputable a => [a] -> Int -> a
@@ -193,6 +194,9 @@ removeDups cmp xs
collect_dups dups_so_far (x :| []) = (dups_so_far, x)
collect_dups dups_so_far dups@(x :| _) = (dups:dups_so_far, x)
+removeDupsOn :: Ord b => (a -> b) -> [a] -> ([a], [NonEmpty a])
+removeDupsOn f x = removeDups (comparing f) x
+
-- | Remove the duplicates from a list using the provided
-- comparison function.
nubOrdBy :: (a -> a -> Ordering) -> [a] -> [a]