@@ -151,7 +151,7 @@ module Streamly.Streams.StreamK
151151 , serial
152152
153153 -- * Utilities
154− , consMSerial
154+ , consMStream
155155 , bindWith
156156 , withLocal
157157
@@ -197,6 +197,7 @@ infixr 5 `cons`
197197-- @
198198--
199199-- @since 0.1.0
200+{-# INLINE cons #-}
200201cons :: IsStream t => a -> t m a -> t m a
201202cons a r = mkStream $ \_ yld _ _ -> yld a r
202203
@@ -210,6 +211,7 @@ infixr 5 .:
210211-- @
211212--
212213-- @since 0.1.1
214+{-# INLINE (.:) #-}
213215(.:) :: IsStream t => a -> t m a -> t m a
214216(.:) = cons
215217
@@ -269,6 +271,7 @@ unfoldrM step = go
269271-- Special generation
270272-------------------------------------------------------------------------------
271273
274+{-# INLINE yield #-}
272275yield :: IsStream t => a -> t m a
273276yield a = mkStream $ \_ _ single _ -> single a
274277
@@ -289,14 +292,17 @@ once = yieldM
289292-- Generate an infinite stream by repeating a pure value.
290293--
291294-- @since 0.4.0
295+{-# INLINE repeat #-}
292296repeat :: IsStream t => a -> t m a
293297repeat a = let x = cons a x in x
294298
299+{-# INLINE replicateM #-}
295300replicateM :: (IsStream t, MonadAsync m) => Int -> m a -> t m a
296301replicateM n m = go n
297302 where
298303 go cnt = if cnt <= 0 then nil else m |: go (cnt - 1)
299304
305+{-# INLINE replicate #-}
300306replicate :: IsStream t => Int -> a -> t m a
301307replicate n a = go n
302308 where
@@ -331,6 +337,7 @@ fromStreamK = fromStream
331337-------------------------------------------------------------------------------
332338
333339-- | Lazy right associative fold.
340+{-# INLINE foldr #-}
334341foldr :: (IsStream t, Monad m) => (a -> b -> b) -> b -> t m a -> m b
335342foldr step acc m = go m
336343 where
@@ -405,6 +412,7 @@ foldl' step begin = foldx step begin id
405412
406413-- XXX replace the recursive "go" with explicit continuations.
407414-- | Like 'foldx', but with a monadic step function.
415+{-# INLINABLE foldxM #-}
408416foldxM :: (IsStream t, Monad m)
409417 => (x -> a -> m x) -> m x -> (x -> m b) -> t m a -> m b
410418foldxM step begin done m = go begin m
@@ -416,6 +424,7 @@ foldxM step begin done m = go begin m
416424 in foldStream defState yieldk single stop m1
417425
418426-- | Like 'foldl'' but with a monadic step function.
427+{-# INLINE foldlM' #-}
419428foldlM' :: (IsStream t, Monad m) => (b -> a -> m b) -> b -> t m a -> m b
420429foldlM' step begin = foldxM step (return begin) return
421430
@@ -494,6 +503,7 @@ notElem e m = go m
494503 yieldk a r = if a == e then return False else go r
495504 in foldStream defState yieldk single stop m1
496505
506+{-# INLINABLE all #-}
497507all :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
498508all p m = go m
499509 where
@@ -504,6 +514,7 @@ all p m = go m
504514 | otherwise = return False
505515 in foldStream defState yieldk single (return True) m1
506516
517+{-# INLINABLE any #-}
507518any :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
508519any p m = go m
509520 where
@@ -741,6 +752,7 @@ takeWhile p m = go m
741752 | otherwise = stp
742753 in foldStream st yieldk single stp m1
743754
755+{-# INLINE drop #-}
744756drop :: IsStream t => Int -> t m a -> t m a
745757drop n m = go n m
746758 where
@@ -874,6 +886,7 @@ zipWith f = go
874886-- | Zip two streams serially using a monadic zipping function.
875887--
876888-- @since 0.1.0
889+{-# INLINABLE zipWithM #-}
877890zipWithM :: (IsStream t, Monad m) => (a -> b -> m c) -> t m a -> t m b -> t m c
878891zipWithM f m1 m2 = go m1 m2
879892 where
@@ -974,6 +987,7 @@ _alt m1 m2 = mkStream $ \st yld sng stp ->
974987-- MonadReader
975988------------------------------------------------------------------------------
976989
990+{-# INLINABLE withLocal #-}
977991withLocal :: MonadReader r m => (r -> r) -> Stream m a -> Stream m a
978992withLocal f m =
979993 mkStream $ \st yld sng stp ->