Skip to content

Commit 963049d

Browse files
committed
Implement more methods from Foldable class.
Add specialised fold, foldl and foldr implementations.
1 parent 3351ee0 commit 963049d

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

Data/IntMap.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ import qualified Data.IntSet as IntSet
189189
import Data.Monoid (Monoid(..))
190190
import Data.Maybe (fromMaybe)
191191
import Data.Typeable
192-
import Data.Foldable (Foldable(foldMap))
192+
import qualified Data.Foldable as Foldable
193193
import Data.Traversable (Traversable(traverse))
194194
import Control.Applicative (Applicative(pure,(<*>)),(<$>))
195195
import Control.Monad ( liftM )
@@ -288,10 +288,15 @@ instance Monoid (IntMap a) where
288288
mappend = union
289289
mconcat = unions
290290

291-
instance Foldable IntMap where
292-
foldMap _ Nil = mempty
293-
foldMap f (Tip _k v) = f v
294-
foldMap f (Bin _ _ l r) = foldMap f l `mappend` foldMap f r
291+
instance Foldable.Foldable IntMap where
292+
fold Nil = mempty
293+
fold (Tip _ v) = v
294+
fold (Bin _ _ l r) = Foldable.fold l `mappend` Foldable.fold r
295+
foldr = foldr
296+
foldl = foldl
297+
foldMap _ Nil = mempty
298+
foldMap f (Tip _k v) = f v
299+
foldMap f (Bin _ _ l r) = Foldable.foldMap f l `mappend` Foldable.foldMap f r
295300

296301
instance Traversable IntMap where
297302
traverse _ Nil = pure Nil

Data/Map.hs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ import qualified Data.List as List
218218
import Data.Monoid (Monoid(..))
219219
import Control.Applicative (Applicative(..), (<$>))
220220
import Data.Traversable (Traversable(traverse))
221-
import Data.Foldable (Foldable(foldMap))
221+
import qualified Data.Foldable as Foldable
222222
import Data.Typeable
223223

224224
#if __GLASGOW_HASKELL__
@@ -2457,10 +2457,13 @@ instance Traversable (Map k) where
24572457
traverse f (Bin s k v l r)
24582458
= flip (Bin s k) <$> traverse f l <*> f v <*> traverse f r
24592459

2460-
instance Foldable (Map k) where
2461-
foldMap _f Tip = mempty
2462-
foldMap f (Bin _s _k v l r)
2463-
= foldMap f l `mappend` f v `mappend` foldMap f r
2460+
instance Foldable.Foldable (Map k) where
2461+
fold Tip = mempty
2462+
fold (Bin _ _ v l r) = Foldable.fold l `mappend` v `mappend` Foldable.fold r
2463+
foldr = foldr
2464+
foldl = foldl
2465+
foldMap _ Tip = mempty
2466+
foldMap f (Bin _ _ v l r) = Foldable.foldMap f l `mappend` f v `mappend` Foldable.foldMap f r
24642467

24652468
{--------------------------------------------------------------------
24662469
Read

Data/Set.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ module Data.Set (
138138
import Prelude hiding (filter,foldl,foldr,null,map)
139139
import qualified Data.List as List
140140
import Data.Monoid (Monoid(..))
141-
import Data.Foldable (Foldable(foldMap))
141+
import qualified Data.Foldable as Foldable
142142
import Data.Typeable
143143

144144
{-
@@ -185,9 +185,13 @@ instance Ord a => Monoid (Set a) where
185185
mappend = union
186186
mconcat = unions
187187

188-
instance Foldable Set where
188+
instance Foldable.Foldable Set where
189+
fold Tip = mempty
190+
fold (Bin _ k l r) = Foldable.fold l `mappend` k `mappend` Foldable.fold r
191+
foldr = foldr
192+
foldl = foldl
189193
foldMap _ Tip = mempty
190-
foldMap f (Bin _s k l r) = foldMap f l `mappend` f k `mappend` foldMap f r
194+
foldMap f (Bin _ k l r) = Foldable.foldMap f l `mappend` f k `mappend` Foldable.foldMap f r
191195

192196
#if __GLASGOW_HASKELL__
193197

0 commit comments

Comments
 (0)