diff options
| author | David Feuer <david.feuer@gmail.com> | 2017-05-04 14:16:02 -0400 |
|---|---|---|
| committer | Ben Gamari <ben@smart-cactus.org> | 2017-05-04 18:20:44 -0400 |
| commit | a660844c0859b7a2e76c15f2fb4abec209afea90 (patch) | |
| tree | 2f3eced4dc10df4a91deae6e6ae6181c730014bd /compiler/utils/UniqFM.hs | |
| parent | 41a00fa1b9c3f82fc1919e3203488666f3fc75be (diff) | |
| download | haskell-a660844c0859b7a2e76c15f2fb4abec209afea90.tar.gz | |
Add an Eq instance for UniqSet
I left that out by mistake, and it apparently breaks at least one
existing plugin.
Reviewers: christiaanb, austin, bgamari
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3518
Diffstat (limited to 'compiler/utils/UniqFM.hs')
| -rw-r--r-- | compiler/utils/UniqFM.hs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/compiler/utils/UniqFM.hs b/compiler/utils/UniqFM.hs index 8214f1704b..71a092b28e 100644 --- a/compiler/utils/UniqFM.hs +++ b/compiler/utils/UniqFM.hs @@ -55,6 +55,7 @@ module UniqFM ( intersectUFM, intersectUFM_C, disjointUFM, + equalKeysUFM, nonDetFoldUFM, foldUFM, nonDetFoldUFM_Directly, anyUFM, allUFM, seqEltsUFM, mapUFM, mapUFM_Directly, @@ -76,6 +77,11 @@ import Outputable import Data.List (foldl') import qualified Data.IntMap as M +#if MIN_VERSION_containers(0,5,9) +import qualified Data.IntMap.Merge.Lazy as M +import Control.Applicative (Const (..)) +import qualified Data.Monoid as Mon +#endif import qualified Data.IntSet as S import Data.Typeable import Data.Data @@ -339,6 +345,17 @@ nonDetUFMToList (UFM m) = map (\(k, v) -> (getUnique k, v)) $ M.toList m ufmToIntMap :: UniqFM elt -> M.IntMap elt ufmToIntMap (UFM m) = m +-- Determines whether two 'UniqFm's contain the same keys. +equalKeysUFM :: UniqFM a -> UniqFM b -> Bool +#if MIN_VERSION_containers(0,5,9) +equalKeysUFM (UFM m1) (UFM m2) = Mon.getAll $ getConst $ + M.mergeA (M.traverseMissing (\_ _ -> Const (Mon.All False))) + (M.traverseMissing (\_ _ -> Const (Mon.All False))) + (M.zipWithAMatched (\_ _ _ -> Const (Mon.All True))) m1 m2 +#else +equalKeysUFM (UFM m1) (UFM m2) = M.keys m1 == M.keys m2 +#endif + -- Instances #if __GLASGOW_HASKELL__ > 710 |
