@@ -1497,7 +1497,7 @@ partition = partitionBy id
1497{-# INLINE demuxScanWith #-}
1497{-# INLINE demuxScanWith #-}
1498demuxScanWith :: (Monad m, IsMap f, Traversable f) =>
1498demuxScanWith :: (Monad m, IsMap f, Traversable f) =>
1499 (a -> Key f)
1499 (a -> Key f)
1500− -> (Key f -> Fold m a b)
1500+ -> (Key f -> m (Fold m a b))
1501 -> Fold m a (m (f b), Maybe (Key f, b))
1501 -> Fold m a (m (f b), Maybe (Key f, b))
1502demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
1502demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
@@ -1521,7 +1521,7 @@ demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
1522 step (Tuple' kv _) a = do
1522 step (Tuple' kv _) a = do
1523 let k = getKey a
1523 let k = getKey a
1524− let fld = getFold k
1524+ fld <- getFold k
1525 case IsMap.mapLookup k kv of
1525 case IsMap.mapLookup k kv of
1526 Nothing -> runFold kv fld (k, a)
1526 Nothing -> runFold kv fld (k, a)
1527 Just f -> runFold kv f (k, a)
1527 Just f -> runFold kv f (k, a)
@@ -1544,7 +1544,7 @@ demuxScanWith getKey getFold = fmap extract $ foldlM' step initial
1544{-# INLINE demuxScanMutWith #-}
1544{-# INLINE demuxScanMutWith #-}
1545demuxScanMutWith :: (MonadIO m, IsMap f, Traversable f) =>
1545demuxScanMutWith :: (MonadIO m, IsMap f, Traversable f) =>
1546 (a -> Key f)
1546 (a -> Key f)
1547− -> (Key f -> Fold m a b)
1547+ -> (Key f -> m (Fold m a b))
1548 -> Fold m a (m (f b), Maybe (Key f, b))
1548 -> Fold m a (m (f b), Maybe (Key f, b))
1549demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
1549demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
@@ -1586,7 +1586,7 @@ demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
1586 let k = getKey a
1586 let k = getKey a
1587 case IsMap.mapLookup k kv of
1587 case IsMap.mapLookup k kv of
1588 Nothing -> do
1588 Nothing -> do
1589− let f = getFold k
1589+ f <- getFold k
1590 initFold kv f (k, a)
1590 initFold kv f (k, a)
1591 Just ref -> do
1591 Just ref -> do
1592 f <- liftIO $ readIORef ref
1592 f <- liftIO $ readIORef ref
@@ -1607,7 +1607,7 @@ demuxScanMutWith getKey getFold = fmap extract $ foldlM' step initial
1608{-# INLINE demuxWith #-}
1608{-# INLINE demuxWith #-}
1609demuxWith :: (Monad m, IsMap f, Traversable f) =>
1609demuxWith :: (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)
1611demuxWith getKey getFold =
1611demuxWith getKey getFold =
1613 classifier = demuxScanWith getKey getFold
1613 classifier = demuxScanWith getKey getFold
@@ -1625,7 +1625,7 @@ demuxWith getKey getFold =
1626{-# INLINE demuxMutWith #-}
1626{-# INLINE demuxMutWith #-}
1627demuxMutWith :: (MonadIO m, IsMap f, Traversable f) =>
1627demuxMutWith :: (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)
1629demuxMutWith getKey getFold =
1629demuxMutWith getKey getFold =
1631 classifier = demuxScanMutWith getKey getFold
1631 classifier = demuxScanMutWith getKey getFold
@@ -1641,8 +1641,8 @@ demuxMutWith getKey getFold =
1642-- >>> import Data.Map (Map)
1642-- >>> import Data.Map (Map)
1643-- >>> :{
1643-- >>> :{
1644−-- let f "SUM" = Fold.sum
1644+-- let f "SUM" = return Fold.sum
1645−-- f _ = Fold.product
1645+-- f _ = return Fold.product
1646-- input = Stream.fromList [("SUM",1),("PRODUCT",2),("SUM",3),("PRODUCT",4)]
1646-- input = Stream.fromList [("SUM",1),("PRODUCT",2),("SUM",3),("PRODUCT",4)]
1647-- in Stream.fold (Fold.demux f) input :: IO (Map String Int)
1647-- in Stream.fold (Fold.demux f) input :: IO (Map String Int)
@@ -1653,8 +1653,8 @@ demuxMutWith getKey getFold =
1653-- /Pre-release/
1653-- /Pre-release/
1654{-# INLINE demux #-}
1654{-# INLINE demux #-}
1655demux :: (Monad m, IsMap f, Traversable f) =>
1655demux :: (Monad m, IsMap f, Traversable f) =>
1656− (Key f -> Fold m a b) -> Fold m (Key f, a) (f b)
1656+ (Key f -> m (Fold m a b)) -> Fold m (Key f, a) (f b)
1657−demux f = demuxWith fst (lmap snd . f)
1657+demux f = demuxWith fst (fmap (lmap snd) . f)
1659------------------------------------------------------------------------------
1659------------------------------------------------------------------------------
1660-- Classify: Like demux but uses the same fold for all keys.
1660-- Classify: Like demux but uses the same fold for all keys.