X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FBag.lhs;h=ed9a5407fbfd58c17085a97e1556e4a7a63c4f8f;hb=3a223cd2811d46295048b3a2dab11403ca291b20;hp=fcb9a9c40b3061a7656718a188bb2104bc8c731b;hpb=580a1e579a16df8cf80867badba8c43a1760fb02;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/Bag.lhs b/ghc/compiler/utils/Bag.lhs index fcb9a9c..ed9a540 100644 --- a/ghc/compiler/utils/Bag.lhs +++ b/ghc/compiler/utils/Bag.lhs @@ -1,28 +1,28 @@ % -% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996 +% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % \section[Bags]{@Bag@: an unordered collection with duplicates} \begin{code} -#include "HsVersions.h" - module Bag ( Bag, -- abstract type emptyBag, unitBag, unionBags, unionManyBags, mapBag, elemBag, - filterBag, partitionBag, concatBag, foldBag, foldrBag, + filterBag, partitionBag, concatBag, foldBag, foldrBag, foldlBag, isEmptyBag, consBag, snocBag, listToBag, bagToList ) where -IMP_Ubiq(){-uitous-} -IMPORT_1_3(List(partition)) +#include "HsVersions.h" + +import Outputable +import List ( partition ) +\end{code} -import Outputable --( interpp'SP ) -import Pretty +\begin{code} data Bag a = EmptyBag | UnitBag a @@ -130,6 +130,16 @@ foldrBag k z (TwoBags b1 b2) = foldrBag k (foldrBag k z b2) b1 foldrBag k z (ListBag xs) = foldr k z xs foldrBag k z (ListOfBags bs) = foldr (\b r -> foldrBag k r b) z bs +foldlBag :: (r -> a -> r) -> r + -> Bag a + -> r + +foldlBag k z EmptyBag = z +foldlBag k z (UnitBag x) = k z x +foldlBag k z (TwoBags b1 b2) = foldlBag k (foldlBag k z b1) b2 +foldlBag k z (ListBag xs) = foldl k z xs +foldlBag k z (ListOfBags bs) = foldl (\r b -> foldlBag k r b) z bs + mapBag :: (a -> b) -> Bag a -> Bag b mapBag f EmptyBag = EmptyBag @@ -149,10 +159,10 @@ bagToList b = foldrBag (:) [] b \begin{code} instance (Outputable a) => Outputable (Bag a) where - ppr sty EmptyBag = ptext SLIT("emptyBag") - ppr sty (UnitBag a) = ppr sty a - ppr sty (TwoBags b1 b2) = hsep [ppr sty b1 <> comma, ppr sty b2] - ppr sty (ListBag as) = interpp'SP sty as - ppr sty (ListOfBags bs) = brackets (interpp'SP sty bs) + ppr EmptyBag = ptext SLIT("emptyBag") + ppr (UnitBag a) = ppr a + ppr (TwoBags b1 b2) = hsep [ppr b1 <> comma, ppr b2] + ppr (ListBag as) = interpp'SP as + ppr (ListOfBags bs) = brackets (interpp'SP bs) \end{code}