emptyBag, unitBag, unionBags, unionManyBags,
mapBag,
- elemBag,
+ elemBag, lengthBag,
filterBag, partitionBag, concatBag, foldBag, foldrBag, foldlBag,
isEmptyBag, isSingletonBag, consBag, snocBag, anyBag,
listToBag, bagToList,
import Util ( isSingleton )
import Data.List ( partition )
+
+infixr 3 `consBag`
+infixl 3 `snocBag`
\end{code}
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
\begin{code}
instance (Outputable a) => Outputable (Bag a) where
- ppr bag = char '<' <> pprWithCommas ppr (bagToList bag) <> char '>'
+ ppr bag = braces (pprWithCommas ppr (bagToList bag))
\end{code}