Add Bag.anyBag (analogous to List.any)
authorsimonpj@microsoft.com <unknown>
Fri, 3 Feb 2006 17:46:27 +0000 (17:46 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 3 Feb 2006 17:46:27 +0000 (17:46 +0000)
ghc/compiler/utils/Bag.lhs

index 4ee8b0f..b107f84 100644 (file)
@@ -11,7 +11,7 @@ module Bag (
        mapBag,
        elemBag,
        filterBag, partitionBag, concatBag, foldBag, foldrBag, foldlBag,
-       isEmptyBag, isSingletonBag, consBag, snocBag,
+       isEmptyBag, isSingletonBag, consBag, snocBag, anyBag,
        listToBag, bagToList, 
        mapBagM, mapAndUnzipBagM
     ) where
@@ -75,6 +75,12 @@ filterBag pred (TwoBags b1 b2) = sat1 `unionBags` sat2
                                 sat2 = filterBag pred b2
 filterBag pred (ListBag vs)    = listToBag (filter pred vs)
 
+anyBag :: (a -> Bool) -> Bag a -> Bool
+anyBag p EmptyBag        = False
+anyBag p (UnitBag v)     = p v
+anyBag p (TwoBags b1 b2) = anyBag p b1 || anyBag p b2
+anyBag p (ListBag xs)    = any p xs
+
 concatBag :: Bag (Bag a) -> Bag a
 concatBag EmptyBag         = EmptyBag
 concatBag (UnitBag b)       = b