Implement more methods from Foldable class.
authorMilan Straka <fox@ucw.cz>
Wed, 13 Jul 2011 10:33:22 +0000 (12:33 +0200)
committerMilan Straka <fox@ucw.cz>
Wed, 13 Jul 2011 10:58:41 +0000 (12:58 +0200)
Add specialised fold, foldl and foldr implementations.

Data/IntMap.hs
Data/Map.hs
Data/Set.hs

index 99b2ddb..7badc08 100644 (file)
@@ -189,7 +189,7 @@ import qualified Data.IntSet as IntSet
 import Data.Monoid (Monoid(..))
 import Data.Maybe (fromMaybe)
 import Data.Typeable
-import Data.Foldable (Foldable(foldMap))
+import qualified Data.Foldable as Foldable
 import Data.Traversable (Traversable(traverse))
 import Control.Applicative (Applicative(pure,(<*>)),(<$>))
 import Control.Monad ( liftM )
@@ -288,10 +288,15 @@ instance Monoid (IntMap a) where
     mappend = union
     mconcat = unions
 
-instance Foldable IntMap where
-    foldMap _ Nil = mempty
-    foldMap f (Tip _k v) = f v
-    foldMap f (Bin _ _ l r) = foldMap f l `mappend` foldMap f r
+instance Foldable.Foldable IntMap where
+  fold Nil = mempty
+  fold (Tip _ v) = v
+  fold (Bin _ _ l r) = Foldable.fold l `mappend` Foldable.fold r
+  foldr = foldr
+  foldl = foldl
+  foldMap _ Nil = mempty
+  foldMap f (Tip _k v) = f v
+  foldMap f (Bin _ _ l r) = Foldable.foldMap f l `mappend` Foldable.foldMap f r
 
 instance Traversable IntMap where
     traverse _ Nil = pure Nil
index cd63266..cec0eff 100644 (file)
@@ -218,7 +218,7 @@ import qualified Data.List as List
 import Data.Monoid (Monoid(..))
 import Control.Applicative (Applicative(..), (<$>))
 import Data.Traversable (Traversable(traverse))
-import Data.Foldable (Foldable(foldMap))
+import qualified Data.Foldable as Foldable
 import Data.Typeable
 
 #if __GLASGOW_HASKELL__
@@ -2457,10 +2457,13 @@ instance Traversable (Map k) where
   traverse f (Bin s k v l r)
     = flip (Bin s k) <$> traverse f l <*> f v <*> traverse f r
 
-instance Foldable (Map k) where
-  foldMap _f Tip = mempty
-  foldMap f (Bin _s _k v l r)
-    = foldMap f l `mappend` f v `mappend` foldMap f r
+instance Foldable.Foldable (Map k) where
+  fold Tip = mempty
+  fold (Bin _ _ v l r) = Foldable.fold l `mappend` v `mappend` Foldable.fold r
+  foldr = foldr
+  foldl = foldl
+  foldMap _ Tip = mempty
+  foldMap f (Bin _ _ v l r) = Foldable.foldMap f l `mappend` f v `mappend` Foldable.foldMap f r
 
 {--------------------------------------------------------------------
   Read
index 5ef1f42..ea0e571 100644 (file)
@@ -138,7 +138,7 @@ module Data.Set (
 import Prelude hiding (filter,foldl,foldr,null,map)
 import qualified Data.List as List
 import Data.Monoid (Monoid(..))
-import Data.Foldable (Foldable(foldMap))
+import qualified Data.Foldable as Foldable
 import Data.Typeable
 
 {-
@@ -185,9 +185,13 @@ instance Ord a => Monoid (Set a) where
     mappend = union
     mconcat = unions
 
-instance Foldable Set where
+instance Foldable.Foldable Set where
+    fold Tip = mempty
+    fold (Bin _ k l r) = Foldable.fold l `mappend` k `mappend` Foldable.fold r
+    foldr = foldr
+    foldl = foldl
     foldMap _ Tip = mempty
-    foldMap f (Bin _s k l r) = foldMap f l `mappend` f k `mappend` foldMap f r
+    foldMap f (Bin _ k l r) = Foldable.foldMap f l `mappend` f k `mappend` Foldable.foldMap f r
 
 #if __GLASGOW_HASKELL__