on master help sign in
Add nilM to create an empty stream with side effect
commit90f0a9730088cd3a39dd8a6cf5f4ddf15cb96a62 authorHarendra Kumar <harendra.kumar@gmail.com> dateThu 10 Oct 2019, 18:22 (7 years ago) parent103705f
4 files changed+22
src/Streamly/Internal/Prelude.hs+1 src/Streamly/Streams/StreamD.hs+6 src/Streamly/Streams/StreamK.hs+1 src/Streamly/Streams/StreamK/Type.hs+14
src/Streamly/Internal/Prelude.hs+1
@@ -23,6 +23,7 @@ module Streamly.Internal.Prelude
2323 -- * Construction
2424 -- ** Primitives
2525 K.nil
26+ , K.nilM
2627 , K.cons
2728 , (K..:)
2829
src/Streamly/Streams/StreamD.hs+6
@@ -50,6 +50,7 @@ module Streamly.Streams.StreamD
5050
5151 -- * Construction
5252 , nil
53+ , nilM
5354 , cons
5455
5556 -- * Deconstruction
@@ -326,6 +327,11 @@ import Foreign.ForeignPtr (ForeignPtr, touchForeignPtr)
326327nil :: Monad m => Stream m a
327328nil = Stream (\_ _ -> return Stop) ()
328329
330+-- | An empty 'Stream' with a side effect.
331+{-# INLINE_NORMAL nilM #-}
332+nilM :: Monad m => m b -> Stream m a
333+nilM m = Stream (\_ _ -> m >> return Stop) ()
334+
329335{-# INLINE_NORMAL consM #-}
330336consM :: Monad m => m a -> Stream m a -> Stream m a
331337consM m (Stream step state) = Stream step1 Nothing
src/Streamly/Streams/StreamK.hs+1
@@ -40,6 +40,7 @@ module Streamly.Streams.StreamK
4040 -- * Construction Primitives
4141 , mkStream
4242 , nil
43+ , nilM
4344 , cons
4445 , (.:)
4546
src/Streamly/Streams/StreamK/Type.hs+14
@@ -67,6 +67,7 @@ module Streamly.Streams.StreamK.Type
6767 , yield
6868
6969 , nil
70+ , nilM
7071 , conjoin
7172 , serial
7273 , map
@@ -324,6 +325,19 @@ infixr 5 .:
324325nil :: IsStream t => t m a
325326nil = mkStream $ \_ _ _ stp -> stp
326327
328+-- | An empty stream producing a side effect.
329+--
330+-- @
331+-- > toList (nilM (print "nil"))
332+-- "nil"
333+-- []
334+-- @
335+--
336+-- /Internal/
337+{-# INLINE_NORMAL nilM #-}
338+nilM :: (IsStream t, Monad m) => m b -> t m a
339+nilM m = mkStream $ \_ _ _ stp -> m >> stp
340+
327341{-# INLINE_NORMAL yield #-}
328342yield :: IsStream t => a -> t m a
329343yield a = mkStream $ \_ _ single _ -> single a