@@ -43,7 +43,7 @@ module Data.Map
43
43
import Prelude
44
44
45
45
import Data.Eq (class Eq1 )
46
- import Data.Foldable (foldl , foldMap , foldr , class Foldable )
46
+ import Data.Foldable (foldl , foldMap , foldr , foldMapDefaultL , class Foldable )
47
47
import Data.FoldableWithIndex (class FoldableWithIndex )
48
48
import Data.FunctorWithIndex (class FunctorWithIndex , mapWithIndex )
49
49
import Data.List (List (..), (:), length , nub )
@@ -99,15 +99,21 @@ instance functorWithIndexMap :: FunctorWithIndex k (Map k) where
99
99
mapWithIndex f (Three left k1 v1 mid k2 v2 right) = Three (mapWithIndex f left) k1 (f k1 v1) (mapWithIndex f mid) k2 (f k2 v2) (mapWithIndex f right)
100
100
101
101
instance foldableMap :: Foldable (Map k ) where
102
- foldl f z m = go acc (m : Nil )
102
+ foldl f z m = go z (m : Nil )
103
+ where
103
104
go acc Nil = acc
104
105
go acc (hd : tl) = case hd of
105
106
Leaf -> go acc tl
106
- Two left _ v right ->
107
- go (f acc k) (left : right : tl)
108
-
109
- foldr f z m = foldr f z (values m)
110
- foldMap f m = foldMap f (values m)
107
+ Two Leaf _ v Leaf ->
108
+ go (f acc v) tl
109
+ Two Leaf _ v right ->
110
+ go (f acc v) (right : tl)
111
+ Two left k v right ->
112
+ go acc (left : singleton k v : right : tl)
113
+ Three left k1 v1 mid k2 v2 right ->
114
+ go acc (left : singleton k1 v1 : mid : singleton k2 v2 : right : tl)
115
+ foldr f z m = foldr f z (values m)
116
+ foldMap = foldMapDefaultL
111
117
112
118
instance foldableWithIndexMap :: FoldableWithIndex k (Map k ) where
113
119
foldlWithIndex f z m = foldl (uncurry <<< (flip f)) z $ asList $ toUnfoldable m
0 commit comments