on master help sign in
Add fromPureStreamN
commit994c442296079ead204b953ef4481a477f59e2de authorHarendra Kumar <harendra@composewell.com> dateMon 25 Dec 2023, 06:05 (3 years ago) parent30c97a3
2 files changed+14
core/src/Streamly/Internal/Data/Array/Type.hs+6 core/src/Streamly/Internal/Data/MutArray/Type.hs+8
core/src/Streamly/Internal/Data/Array/Type.hs+6
@@ -39,6 +39,7 @@ module Streamly.Internal.Data.Array.Type
3939 , fromListRevN
4040 , fromStreamDN
4141 , fromStreamD
42+ , fromPureStreamN
4243 , fromPureStream
4344 , fromByteStr#
4445
@@ -616,6 +617,11 @@ unsafeMakePure (Fold step initial extract final) =
616617 (\s -> return $! unsafeInlineIO $ extract s)
617618 (\s -> return $! unsafeInlineIO $ final s)
618619
620+{-# INLINE fromPureStreamN #-}
621+fromPureStreamN :: Unbox a => Int -> Stream Identity a -> Array a
622+fromPureStreamN n x =
623+ unsafePerformIO $ fmap unsafeFreeze (MA.fromPureStreamN n x)
624+
619625-- | Convert a pure stream in Identity monad to an immutable array.
620626--
621627-- Same as the following but with better performance:
core/src/Streamly/Internal/Data/MutArray/Type.hs+8
@@ -74,6 +74,7 @@ module Streamly.Internal.Data.MutArray.Type
7474 , fromListRev
7575 , fromStreamDN
7676 , fromStreamD
77+ , fromPureStreamN
7778 , fromPureStream
7879
7980 -- ** Random writes
@@ -2028,6 +2029,13 @@ pinnedFromListN n xs = fromStreamDNAs Pinned n $ D.fromList xs
20282029fromListRevN :: (MonadIO m, Unbox a) => Int -> [a] -> m (MutArray a)
20292030fromListRevN n xs = D.fold (writeRevN n) $ D.fromList xs
20302031
2032+-- | Convert a pure stream in Identity monad to a mutable array.
2033+{-# INLINABLE fromPureStreamN #-}
2034+fromPureStreamN :: (MonadIO m, Unbox a) =>
2035+ Int -> Stream Identity a -> m (MutArray a)
2036+fromPureStreamN n xs =
2037+ liftIO $ D.fold (writeN n) $ D.morphInner (return . runIdentity) xs
2038+
20312039-- | Convert a pure stream in Identity monad to a mutable array.
20322040{-# INLINABLE fromPureStream #-}
20332041fromPureStream :: (MonadIO m, Unbox a) => Stream Identity a -> m (MutArray a)