Skip to content

Commit

Permalink
Implement more methods from Foldable class.
Browse files Browse the repository at this point in the history
Add specialised fold, foldl and foldr implementations.
  • Loading branch information
foxik committed Jul 13, 2011
1 parent 3351ee0 commit 963049d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 13 deletions.
15 changes: 10 additions & 5 deletions Data/IntMap.hs
Expand Up @@ -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 )
Expand Down Expand Up @@ -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
Expand Down
13 changes: 8 additions & 5 deletions Data/Map.hs
Expand Up @@ -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__
Expand Down Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions Data/Set.hs
Expand Up @@ -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

{-
Expand Down Expand Up @@ -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__

Expand Down

0 comments on commit 963049d

Please sign in to comment.