diff --git a/src/Data/Map.purs b/src/Data/Map.purs index e764370b..7eca3092 100644 --- a/src/Data/Map.purs +++ b/src/Data/Map.purs @@ -105,7 +105,7 @@ instance foldableMap :: Foldable (Map k) where instance foldableWithIndexMap :: FoldableWithIndex k (Map k) where foldlWithIndex f z m = foldl (uncurry <<< (flip f)) z $ asList $ toUnfoldable m - foldrWithIndex f z m = foldr (uncurry f) z $ asList $ toUnfoldable m + foldrWithIndex f z m = foldr (uncurry f) z $ asList $ toAscUnfoldable m foldMapWithIndex f m = foldMap (uncurry f) $ asList $ toUnfoldable m asList :: forall k v. List (Tuple k v) -> List (Tuple k v) diff --git a/test/Test/Data/Map.purs b/test/Test/Data/Map.purs index bc38e615..75a24e38 100644 --- a/test/Test/Data/Map.purs +++ b/test/Test/Data/Map.purs @@ -8,8 +8,9 @@ import Control.Monad.Eff.Exception (EXCEPTION) import Control.Monad.Eff.Random (RANDOM) import Data.Array as A import Data.Foldable (foldl, for_, all) +import Data.FoldableWithIndex (foldrWithIndex) import Data.Function (on) -import Data.List (List(Cons), groupBy, length, nubBy, singleton, sort, sortBy) +import Data.List (List(..), (:), groupBy, length, nubBy, singleton, sort, sortBy) import Data.List.NonEmpty as NEL import Data.Map as M import Data.Map.Gen (genMap) @@ -333,3 +334,8 @@ mapTests = do <> ", mmin: " <> show mmin <> ", mmax: " <> show mmax <> ", key: " <> show key + + log "foldrWithIndex maintains order" + quickCheck \(TestMap m :: TestMap Int Int) -> + let outList = foldrWithIndex (\i a b -> (Tuple i a) : b) Nil m + in outList == sort outList