Commit a660844c authored by David Feuer's avatar David Feuer Committed by Ben Gamari
Browse files

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
parent 41a00fa1
......@@ -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
......
......@@ -128,6 +128,12 @@ mapUniqSet :: Uniquable b => (a -> b) -> UniqSet a -> UniqSet b
-- the invariant.
newtype UniqSet a = UniqSet {getUniqSet' :: UniqFM a} deriving Data
-- Two 'UniqSet's are considered equal if they contain the same
-- uniques.
instance Eq (UniqSet a) where
UniqSet a == UniqSet b = equalKeysUFM a b
getUniqSet :: UniqSet a -> UniqFM a
getUniqSet = getUniqSet'
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment