mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-16 18:42:30 +03:00
11a454c2d6
This commit applies ormolu to the whole Haskell code base by running `make format`. For in-flight branches, simply merging changes from `main` will result in merge conflicts. To avoid this, update your branch using the following instructions. Replace `<format-commit>` by the hash of *this* commit. $ git checkout my-feature-branch $ git merge <format-commit>^ # and resolve conflicts normally $ make format $ git commit -a -m "reformat with ormolu" $ git merge -s ours post-ormolu https://github.com/hasura/graphql-engine-mono/pull/2404 GitOrigin-RevId: 75049f5c12f430c615eafb4c6b8e83e371e01c8e
41 lines
1.2 KiB
Haskell
41 lines
1.2 KiB
Haskell
module Data.List.Extended
|
|
( duplicates,
|
|
uniques,
|
|
getDifference,
|
|
getDifferenceOn,
|
|
getOverlapWith,
|
|
hasNoDuplicates,
|
|
module L,
|
|
)
|
|
where
|
|
|
|
import Data.Function (on)
|
|
import Data.HashMap.Strict.Extended qualified as Map
|
|
import Data.HashSet qualified as Set
|
|
import Data.Hashable (Hashable)
|
|
import Data.List qualified as L
|
|
import Data.List.NonEmpty qualified as NE
|
|
import Prelude
|
|
|
|
duplicates :: (Eq a, Hashable a) => [a] -> Set.HashSet a
|
|
duplicates =
|
|
Set.fromList . Map.keys . Map.filter (> 1) . Map.fromListWith (+) . map (,1 :: Int)
|
|
|
|
uniques :: Eq a => [a] -> [a]
|
|
uniques = map NE.head . NE.group
|
|
|
|
getDifference :: (Eq a, Hashable a) => [a] -> [a] -> Set.HashSet a
|
|
getDifference = Set.difference `on` Set.fromList
|
|
|
|
getDifferenceOn :: (Eq k, Hashable k) => (v -> k) -> [v] -> [v] -> [v]
|
|
getDifferenceOn f l = Map.elems . Map.differenceOn f l
|
|
|
|
getOverlapWith :: (Eq k, Hashable k) => (v -> k) -> [v] -> [v] -> [(v, v)]
|
|
getOverlapWith getKey left right =
|
|
Map.elems $ Map.intersectionWith (,) (mkMap left) (mkMap right)
|
|
where
|
|
mkMap = Map.fromList . map (\v -> (getKey v, v))
|
|
|
|
hasNoDuplicates :: (Eq a, Hashable a) => [a] -> Bool
|
|
hasNoDuplicates xs = Set.size (Set.fromList xs) == length xs
|