[commit: containers] master: Implement more methods from Foldable class. (963049d)
Ian Lynagh
igloo at earth.li
Sun Jul 17 17:41:17 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/containers
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/963049d281a827bb83109d81115ff544eb8708dc
>---------------------------------------------------------------
commit 963049d281a827bb83109d81115ff544eb8708dc
Author: Milan Straka <fox at ucw.cz>
Date: Wed Jul 13 12:33:22 2011 +0200
Implement more methods from Foldable class.
Add specialised fold, foldl and foldr implementations.
>---------------------------------------------------------------
Data/IntMap.hs | 15 ++++++++++-----
Data/Map.hs | 13 ++++++++-----
Data/Set.hs | 10 +++++++---
3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/Data/IntMap.hs b/Data/IntMap.hs
index 99b2ddb..7badc08 100644
--- a/Data/IntMap.hs
+++ b/Data/IntMap.hs
@@ -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
diff --git a/Data/Map.hs b/Data/Map.hs
index cd63266..cec0eff 100644
--- a/Data/Map.hs
+++ b/Data/Map.hs
@@ -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
diff --git a/Data/Set.hs b/Data/Set.hs
index 5ef1f42..ea0e571 100644
--- a/Data/Set.hs
+++ b/Data/Set.hs
@@ -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__
More information about the Cvs-libraries
mailing list