on master help sign in
Add nilM to create an empty stream with side effect
90f0a97Harendra Kumar
src/Streamly/Internal/Prelude.hs+1
@@ -23,6 +23,7 @@ module Streamly.Internal.Prelude
23 -- * Construction
23 -- * Construction
24 -- ** Primitives
24 -- ** Primitives
25 K.nil
25 K.nil
26+ , K.nilM
26 , K.cons
27 , K.cons
27 , (K..:)
28 , (K..:)
28
29
src/Streamly/Streams/StreamD.hs+6
@@ -50,6 +50,7 @@ module Streamly.Streams.StreamD
50
50
51 -- * Construction
51 -- * Construction
52 , nil
52 , nil
53+ , nilM
53 , cons
54 , cons
54
55
55 -- * Deconstruction
56 -- * Deconstruction
@@ -326,6 +327,11 @@ import Foreign.ForeignPtr (ForeignPtr, touchForeignPtr)
326nil :: Monad m => Stream m a
327nil :: Monad m => Stream m a
327nil = Stream (\_ _ -> return Stop) ()
328nil = Stream (\_ _ -> return Stop) ()
328
329
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+
329{-# INLINE_NORMAL consM #-}
335{-# INLINE_NORMAL consM #-}
330consM :: Monad m => m a -> Stream m a -> Stream m a
336consM :: Monad m => m a -> Stream m a -> Stream m a
331consM m (Stream step state) = Stream step1 Nothing
337consM m (Stream step state) = Stream step1 Nothing
src/Streamly/Streams/StreamK.hs+1
@@ -40,6 +40,7 @@ module Streamly.Streams.StreamK
40 -- * Construction Primitives
40 -- * Construction Primitives
41 , mkStream
41 , mkStream
42 , nil
42 , nil
43+ , nilM
43 , cons
44 , cons
44 , (.:)
45 , (.:)
45
46
src/Streamly/Streams/StreamK/Type.hs+14
@@ -67,6 +67,7 @@ module Streamly.Streams.StreamK.Type
67 , yield
67 , yield
68
68
69 , nil
69 , nil
70+ , nilM
70 , conjoin
71 , conjoin
71 , serial
72 , serial
72 , map
73 , map
@@ -324,6 +325,19 @@ infixr 5 .:
324nil :: IsStream t => t m a
325nil :: IsStream t => t m a
325nil = mkStream $ \_ _ _ stp -> stp
326nil = mkStream $ \_ _ _ stp -> stp
326
327
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+
327{-# INLINE_NORMAL yield #-}
341{-# INLINE_NORMAL yield #-}
328yield :: IsStream t => a -> t m a
342yield :: IsStream t => a -> t m a
329yield a = mkStream $ \_ _ single _ -> single a
343yield a = mkStream $ \_ _ single _ -> single a