on master help sign in
Optimize/fuse classifySessionsBy
2064e76Harendra Kumar
core/src/Streamly/Internal/Data/Stream/StreamD/Type.hs+1−1
@@ -759,7 +759,7 @@ instance Applicative f => Applicative (Stream f) where
759-- Combine N Streams - unfoldMany
759-- Combine N Streams - unfoldMany
760------------------------------------------------------------------------------
760------------------------------------------------------------------------------
761
761
762−-- Define a unique structure to use in inspection testing
762+{-# ANN type ConcatMapUState Fuse #-}
763data ConcatMapUState o i =
763data ConcatMapUState o i =
764 ConcatMapUOuter o
764 ConcatMapUOuter o
765 | ConcatMapUInner o i
765 | ConcatMapUInner o i
src/Streamly/Internal/Data/Stream/IsStream/Reduce.hs+8−4
@@ -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
164− ( concatMap
165− , fold
164+ ( fold
166 , interjectSuffix
165 , interjectSuffix
167 , intersperseM
166 , intersperseM
168 , map
167 , map
@@ -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
186
187
187import Prelude hiding (concatMap, map)
188import Prelude hiding (concatMap, map)
188
189
@@ -1189,7 +1190,10 @@ data SessionEntry a b = LiveSession !a !b | ZombieSession
1189-- (3,"abc")
1190-- (3,"abc")
1190--
1191--
1191-- /Pre-release/
1192-- /Pre-release/
1192−--
1193+
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
1196+-- the code bloat.
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