on master help sign in
toStream/toStreamRev should be able to fold to any monad
0b88931Ranjeet Kumar Ranjan
benchmark/Streamly/Benchmark/Prelude/Serial/Elimination.hs+4−2
@@ -539,7 +539,8 @@ o_n_heap_elimination_toList value =
539 [ bgroup "toList"
539 [ bgroup "toList"
540 -- Converting the stream to a list or pure stream in a strict monad
540 -- Converting the stream to a list or pure stream in a strict monad
541 [ benchIOSink value "toListRev" Internal.toListRev
541 [ benchIOSink value "toListRev" Internal.toListRev
542− , benchIOSink value "toStreamRev" Internal.toStreamRev
542+ , benchIOSink value "toStreamRev"
543+ (Internal.toStreamRev :: (SerialT IO Int -> IO (SerialT Identity Int)))
543 ]
544 ]
544 ]
545 ]
545
546
@@ -548,7 +549,8 @@ o_n_space_elimination_toList value =
548 [ bgroup "toList"
549 [ bgroup "toList"
549 -- Converting the stream to a list or pure stream in a strict monad
550 -- Converting the stream to a list or pure stream in a strict monad
550 [ benchIOSink value "toList" S.toList
551 [ benchIOSink value "toList" S.toList
551− , benchIOSink value "toStream" Internal.toStream
552+ , benchIOSink value "toStream"
553+ (Internal.toStream :: (SerialT IO Int -> IO (SerialT Identity Int)))
552 ]
554 ]
553 ]
555 ]
554
556
src/Streamly/Internal/Data/Stream/IsStream/Eliminate.hs+2−3
@@ -151,7 +151,6 @@ where
151
151
152import Control.Monad.Catch (MonadThrow)
152import Control.Monad.Catch (MonadThrow)
153import Control.Monad.IO.Class (MonadIO(..))
153import Control.Monad.IO.Class (MonadIO(..))
154−import Data.Functor.Identity (Identity (..))
155import Foreign.Storable (Storable)
154import Foreign.Storable (Storable)
156import Streamly.Internal.Data.Parser (Parser (..))
155import Streamly.Internal.Data.Parser (Parser (..))
157import Streamly.Internal.Data.SVar (MonadAsync, defState)
156import Streamly.Internal.Data.SVar (MonadAsync, defState)
@@ -800,7 +799,7 @@ toHandle h = go
800-- /Pre-release/
799-- /Pre-release/
801--
800--
802{-# INLINE toStream #-}
801{-# INLINE toStream #-}
803−toStream :: Monad m => SerialT m a -> m (SerialT Identity a)
802+toStream :: Monad m => SerialT m a -> m (SerialT n a)
804toStream = foldr K.cons K.nil
803toStream = foldr K.cons K.nil
805
804
806-- | Convert a stream to a pure stream in reverse order.
805-- | Convert a stream to a pure stream in reverse order.
@@ -812,7 +811,7 @@ toStream = foldr K.cons K.nil
812-- /Pre-release/
811-- /Pre-release/
813--
812--
814{-# INLINE toStreamRev #-}
813{-# INLINE toStreamRev #-}
815−toStreamRev :: Monad m => SerialT m a -> m (SerialT Identity a)
814+toStreamRev :: Monad m => SerialT m a -> m (SerialT n a)
816toStreamRev = foldl' (flip K.cons) K.nil
815toStreamRev = foldl' (flip K.cons) K.nil
817
816
818------------------------------------------------------------------------------
817------------------------------------------------------------------------------