Rolling back: Make FastString thread-safe.
[ghc-hetmet.git] / compiler / utils / Bag.lhs
index b7e92a3..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,
@@ -22,6 +22,9 @@ import Outputable
 import Util ( isSingleton )
 
 import Data.List ( partition )
+
+infixr 3 `consBag`
+infixl 3 `snocBag`
 \end{code}
 
 
@@ -38,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