on master help sign in
Move fromStream to higher level Unfold module
ccb80efHarendra Kumar
src/Streamly/Data/Unfold.hs+14−1
@@ -149,4 +149,17 @@ import Prelude hiding
149 ( concat, map, mapM, takeWhile, take, filter, const, drop, dropWhile
149 ( concat, map, mapM, takeWhile, take, filter, const, drop, dropWhile
150 , zipWith
150 , zipWith
151 )
151 )
152−import Streamly.Internal.Data.Unfold
152+import Streamly.Internal.Data.Stream.IsStream.Type (IsStream)
153+import Streamly.Internal.Data.Unfold hiding (fromStream)
154+
155+import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
156+import qualified Streamly.Internal.Data.Unfold as Unfold
157+
158+-- | Convert a stream into an 'Unfold'. Note that a stream converted to an
159+-- 'Unfold' may not be as efficient as an 'Unfold' in some situations.
160+--
161+-- /Since: 0.8.0/
162+--
163+{-# INLINE_NORMAL fromStream #-}
164+fromStream :: (IsStream t, Monad m) => Unfold m (t m a) a
165+fromStream = lmap IsStream.adapt Unfold.fromStream
src/Streamly/Internal/Data/Unfold.hs+3−4
@@ -256,14 +256,13 @@ import Streamly.Internal.Control.Concurrent (MonadAsync)
256import Streamly.Internal.Data.Fold.Type (Fold(..))
256import Streamly.Internal.Data.Fold.Type (Fold(..))
257import Streamly.Internal.Data.IOFinalizer
257import Streamly.Internal.Data.IOFinalizer
258 (newIOFinalizer, runIOFinalizer, clearingIOFinalizer)
258 (newIOFinalizer, runIOFinalizer, clearingIOFinalizer)
259−import Streamly.Internal.Data.Stream.IsStream.Type (IsStream)
259+import Streamly.Internal.Data.Stream.Serial (SerialT(..))
260import Streamly.Internal.Data.Stream.StreamD.Type (Stream(..), Step(..))
260import Streamly.Internal.Data.Stream.StreamD.Type (Stream(..), Step(..))
261import Streamly.Internal.Data.SVar.Type (defState)
261import Streamly.Internal.Data.SVar.Type (defState)
262
262
263import qualified Control.Monad.Catch as MC
263import qualified Control.Monad.Catch as MC
264import qualified Data.Tuple as Tuple
264import qualified Data.Tuple as Tuple
265import qualified Streamly.Internal.Data.Fold.Type as FL
265import qualified Streamly.Internal.Data.Fold.Type as FL
266−import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
267import qualified Streamly.Internal.Data.Stream.StreamD.Type as D
266import qualified Streamly.Internal.Data.Stream.StreamD.Type as D
268import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
267import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
269
268
@@ -502,8 +501,8 @@ fromStreamK = Unfold step pure
502-- /Since: 0.8.0/
501-- /Since: 0.8.0/
503--
502--
504{-# INLINE_NORMAL fromStream #-}
503{-# INLINE_NORMAL fromStream #-}
505−fromStream :: (IsStream t, Monad m) => Unfold m (t m a) a
504+fromStream :: Monad m => Unfold m (SerialT m a) a
506−fromStream = lmap IsStream.toStream fromStreamK
505+fromStream = lmap getSerialT fromStreamK
507
506
508-------------------------------------------------------------------------------
507-------------------------------------------------------------------------------
509-- Unfolds
508-- Unfolds