@@ -161,8 +161,7 @@ import Streamly.Internal.Data.Refold.Type (Refold (..))
161import Streamly.Internal.Data.Parser (Parser (..))
161import Streamly.Internal.Data.Parser (Parser (..))
162import Streamly.Internal.Data.Array.Foreign.Type (Array)
162import Streamly.Internal.Data.Array.Foreign.Type (Array)
163import Streamly.Internal.Data.Stream.IsStream.Common
163import Streamly.Internal.Data.Stream.IsStream.Common
166 , interjectSuffix
165 , interjectSuffix
167 , intersperseM
166 , intersperseM
@@ -182,7 +181,9 @@ import qualified Streamly.Internal.Data.Fold as FL
182import qualified Streamly.Internal.Data.Parser.ParserD as PRD
181import qualified Streamly.Internal.Data.Parser.ParserD as PRD
183import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
182import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
184import qualified Streamly.Internal.Data.Stream.StreamD as D
183import qualified Streamly.Internal.Data.Stream.StreamD as D
184+import qualified Streamly.Internal.Data.Stream.IsStream.Expand as Expand
185import qualified Streamly.Internal.Data.Stream.IsStream.Transform as Transform
185import qualified Streamly.Internal.Data.Stream.IsStream.Transform as Transform
186+import qualified Streamly.Internal.Data.Unfold as Unfold
187import Prelude hiding (concatMap, map)
188import Prelude hiding (concatMap, map)
@@ -1189,7 +1190,10 @@ data SessionEntry a b = LiveSession !a !b | ZombieSession
1189-- (3,"abc")
1190-- (3,"abc")
1191-- /Pre-release/
1192-- /Pre-release/
1194+-- XXX this fuses with INLINE but it may be too much work for the compiler.
1195+-- Maybe we can NOINLINE the heap processing stuff and then INLINE it to reduce
1193{-# INLINABLE classifySessionsBy #-}
1197{-# INLINABLE classifySessionsBy #-}
1194classifySessionsBy
1198classifySessionsBy
1195 :: (IsStream t, MonadAsync m, Ord k)
1199 :: (IsStream t, MonadAsync m, Ord k)
@@ -1202,7 +1206,7 @@ classifySessionsBy
1202 -> t m (k, b) -- ^ session key, fold result
1206 -> t m (k, b) -- ^ session key, fold result
1203classifySessionsBy tick reset ejectPred tmout
1207classifySessionsBy tick reset ejectPred tmout
1204 (Fold step initial extract) input =
1208 (Fold step initial extract) input =
1205− concatMap sessionOutputStream
1209+ Expand.unfoldMany (Unfold.lmap sessionOutputStream Unfold.fromStream)
1206 $ scanlMAfter' sstep (return szero) flush
1210 $ scanlMAfter' sstep (return szero) flush
1207 $ interjectSuffix tick (return Nothing)
1211 $ interjectSuffix tick (return Nothing)
1208 $ map Just input
1212 $ map Just input