@@ -1497,7 +1497,7 @@ partition = partitionBy id
14971497{-# INLINE demuxScanWith #-}
14981498demuxScanWith :: (Monad m, IsMap f, Traversable f) =>
14991499 (a -> Key f)
1500− -> (Key f -> Fold m a b)
1500+ -> (Key f -> m (Fold m a b))
15011501 -> Fold m a (m (f b), Maybe (Key f, b))
15021502demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
15031503
@@ -1521,7 +1521,7 @@ demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
15211521
15221522 step (Tuple' kv _) a = do
15231523 let k = getKey a
1524− let fld = getFold k
1524+ fld <- getFold k
15251525 case IsMap.mapLookup k kv of
15261526 Nothing -> runFold kv fld (k, a)
15271527 Just f -> runFold kv f (k, a)
@@ -1544,7 +1544,7 @@ demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
15441544{-# INLINE demuxScanMutWith #-}
15451545demuxScanMutWith :: (MonadIO m, IsMap f, Traversable f) =>
15461546 (a -> Key f)
1547− -> (Key f -> Fold m a b)
1547+ -> (Key f -> m (Fold m a b))
15481548 -> Fold m a (m (f b), Maybe (Key f, b))
15491549demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
15501550
@@ -1586,7 +1586,7 @@ demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
15861586 let k = getKey a
15871587 case IsMap.mapLookup k kv of
15881588 Nothing -> do
1589− let f = getFold k
1589+ f <- getFold k
15901590 initFold kv f (k, a)
15911591 Just ref -> do
15921592 f <- liftIO $ readIORef ref
@@ -1607,7 +1607,7 @@ demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
16071607--
16081608{-# INLINE demuxWith #-}
16091609demuxWith :: (Monad m, IsMap f, Traversable f) =>
1610− (a -> Key f) -> (Key f -> Fold m a b) -> Fold m a (f b)
1610+ (a -> Key f) -> (Key f -> m (Fold m a b)) -> Fold m a (f b)
16111611demuxWith getKey getFold =
16121612 let
16131613 classifier = demuxScanWith getKey getFold
@@ -1625,7 +1625,7 @@ demuxWith getKey getFold =
16251625--
16261626{-# INLINE demuxMutWith #-}
16271627demuxMutWith :: (MonadIO m, IsMap f, Traversable f) =>
1628− (a -> Key f) -> (Key f -> Fold m a b) -> Fold m a (f b)
1628+ (a -> Key f) -> (Key f -> m (Fold m a b)) -> Fold m a (f b)
16291629demuxMutWith getKey getFold =
16301630 let
16311631 classifier = demuxScanMutWith getKey getFold
@@ -1641,8 +1641,8 @@ demuxMutWith getKey getFold =
16411641--
16421642-- >>> import Data.Map (Map)
16431643-- >>> :{
1644−-- let f "SUM" = Fold.sum
1645−-- f _ = Fold.product
1644+-- let f "SUM" = return Fold.sum
1645+-- f _ = return Fold.product
16461646-- input = Stream.fromList [("SUM",1),("PRODUCT",2),("SUM",3),("PRODUCT",4)]
16471647-- in Stream.fold (Fold.demux f) input :: IO (Map String Int)
16481648-- :}
@@ -1653,8 +1653,8 @@ demuxMutWith getKey getFold =
16531653-- /Pre-release/
16541654{-# INLINE demux #-}
16551655demux :: (Monad m, IsMap f, Traversable f) =>
1656− (Key f -> Fold m a b) -> Fold m (Key f, a) (f b)
1657−demux f = demuxWith fst (lmap snd . f)
1656+ (Key f -> m (Fold m a b)) -> Fold m (Key f, a) (f b)
1657+demux f = demuxWith fst (fmap (lmap snd) . f)
16581658
16591659------------------------------------------------------------------------------
16601660-- Classify: Like demux but uses the same fold for all keys.