@@ -160,8 +160,7 @@ import Data.Foldable (Foldable)
160
160
import Data.Functor.Identity (Identity , runIdentity )
161
161
import Data.Functor.Contravariant (Contravariant (.. ))
162
162
import Data.HashMap.Strict (HashMap )
163
- import Data.Map.Strict (Map , alter )
164
- import Data.Maybe (fromMaybe )
163
+ import Data.Map.Strict (Map )
165
164
import Data.Monoid hiding ((<>) )
166
165
import Data.Semigroupoid (Semigroupoid )
167
166
import Data.Functor.Extend (Extend (.. ))
@@ -979,7 +978,7 @@ foldByKeyMap f = case f of
979
978
Fold (step0 :: x -> a -> x ) (ini0 :: x ) (end0 :: x -> b ) ->
980
979
let
981
980
step :: Map k x -> (k ,a ) -> Map k x
982
- step mp (k,a) = Map. alter addToMap k mp where
981
+ step ! mp (k,a) = Map. alter addToMap k mp where
983
982
addToMap Nothing = Just $ step0 ini0 a
984
983
addToMap (Just existing) = Just $ step0 existing a
985
984
@@ -1490,10 +1489,8 @@ projection function. Returns the folded result grouped as a map keyed by the
1490
1489
group.
1491
1490
1492
1491
-}
1493
- groupBy :: Ord g => (a -> g ) -> Fold a r -> Fold a (Map g r )
1494
- groupBy grouper (Fold f i e) = Fold f' mempty (fmap e)
1495
- where
1496
- f' ! m ! a = alter (\ o -> Just (f (fromMaybe i o) a)) (grouper a) m
1492
+ groupBy :: Ord k => (a -> k ) -> Fold a b -> Fold a (Map k b )
1493
+ groupBy f = premap (\ (! a) -> (f a, a)) . foldByKeyMap
1497
1494
{-# INLINABLE groupBy #-}
1498
1495
1499
1496
{-| Combine two folds into a fold over inputs for either of them.
0 commit comments