Add lengthBag to Bag (using in forthcoming patch)
authorsimonpj@microsoft.com <unknown>
Fri, 4 Dec 2009 15:50:55 +0000 (15:50 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 4 Dec 2009 15:50:55 +0000 (15:50 +0000)
compiler/utils/Bag.lhs

index 481dedf..ebc44ac 100644 (file)
@@ -11,7 +11,7 @@ module Bag (
 
         emptyBag, unitBag, unionBags, unionManyBags,
         mapBag,
-        elemBag,
+        elemBag, lengthBag,
         filterBag, partitionBag, concatBag, foldBag, foldrBag, foldlBag,
         isEmptyBag, isSingletonBag, consBag, snocBag, anyBag,
         listToBag, bagToList,
@@ -41,6 +41,12 @@ emptyBag = EmptyBag
 unitBag :: a -> Bag a
 unitBag  = UnitBag
 
+lengthBag :: Bag a -> Int
+lengthBag EmptyBag        = 0
+lengthBag (UnitBag {})    = 1
+lengthBag (TwoBags b1 b2) = lengthBag b1 + lengthBag b2
+lengthBag (ListBag xs)    = length xs
+
 elemBag :: Eq a => a -> Bag a -> Bool
 elemBag _ EmptyBag        = False
 elemBag x (UnitBag y)     = x == y