diff options
Diffstat (limited to 'compiler/utils')
| -rw-r--r-- | compiler/utils/UniqFM.hs | 10 | ||||
| -rw-r--r-- | compiler/utils/UniqSet.hs | 8 |
2 files changed, 16 insertions, 2 deletions
diff --git a/compiler/utils/UniqFM.hs b/compiler/utils/UniqFM.hs index 10cc179910..ed82fee4ec 100644 --- a/compiler/utils/UniqFM.hs +++ b/compiler/utils/UniqFM.hs @@ -56,7 +56,7 @@ module UniqFM ( intersectUFM, intersectUFM_C, disjointUFM, - foldUFM, foldUFM_Directly, + foldUFM, foldUFM_Directly, anyUFM, allUFM, mapUFM, mapUFM_Directly, elemUFM, elemUFM_Directly, filterUFM, filterUFM_Directly, partitionUFM, @@ -275,6 +275,8 @@ intersectUFM_C f (UFM x) (UFM y) = UFM (M.intersectionWith f x y) disjointUFM (UFM x) (UFM y) = M.null (M.intersection x y) foldUFM k z (UFM m) = M.fold k z m + + foldUFM_Directly k z (UFM m) = M.foldWithKey (k . getUnique) z m mapUFM f (UFM m) = UFM (M.map f m) mapUFM_Directly f (UFM m) = UFM (M.mapWithKey (f . getUnique) m) @@ -298,6 +300,12 @@ eltsUFM (UFM m) = M.elems m ufmToSet_Directly (UFM m) = M.keysSet m ufmToList (UFM m) = map (\(k, v) -> (getUnique k, v)) $ M.toList m +anyUFM :: (elt -> Bool) -> UniqFM elt -> Bool +anyUFM p (UFM m) = M.fold ((||) . p) False m + +allUFM :: (elt -> Bool) -> UniqFM elt -> Bool +allUFM p (UFM m) = M.fold ((&&) . p) True m + ufmToIntMap :: UniqFM elt -> M.IntMap elt ufmToIntMap (UFM m) = m diff --git a/compiler/utils/UniqSet.hs b/compiler/utils/UniqSet.hs index a3d503f6eb..c1d19b3695 100644 --- a/compiler/utils/UniqSet.hs +++ b/compiler/utils/UniqSet.hs @@ -22,7 +22,7 @@ module UniqSet ( unionUniqSets, unionManyUniqSets, minusUniqSet, intersectUniqSets, - foldUniqSet, + foldUniqSet, uniqSetAny, uniqSetAll, mapUniqSet, elementOfUniqSet, elemUniqSet_Directly, @@ -113,3 +113,9 @@ sizeUniqSet = sizeUFM isEmptyUniqSet = isNullUFM lookupUniqSet = lookupUFM uniqSetToList = eltsUFM + +uniqSetAny :: (a -> Bool) -> UniqSet a -> Bool +uniqSetAny = anyUFM + +uniqSetAll :: (a -> Bool) -> UniqSet a -> Bool +uniqSetAll = allUFM |
