on master help sign in
Add fromPureStreamN
994c442Harendra Kumar
core/src/Streamly/Internal/Data/Array/Type.hs+6
@@ -39,6 +39,7 @@ module Streamly.Internal.Data.Array.Type
39 , fromListRevN
39 , fromListRevN
40 , fromStreamDN
40 , fromStreamDN
41 , fromStreamD
41 , fromStreamD
42+ , fromPureStreamN
42 , fromPureStream
43 , fromPureStream
43 , fromByteStr#
44 , fromByteStr#
44
45
@@ -616,6 +617,11 @@ unsafeMakePure (Fold step initial extract final) =
616 (\s -> return $! unsafeInlineIO $ extract s)
617 (\s -> return $! unsafeInlineIO $ extract s)
617 (\s -> return $! unsafeInlineIO $ final s)
618 (\s -> return $! unsafeInlineIO $ final s)
618
619
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+
619-- | Convert a pure stream in Identity monad to an immutable array.
625-- | Convert a pure stream in Identity monad to an immutable array.
620--
626--
621-- Same as the following but with better performance:
627-- 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
74 , fromListRev
74 , fromListRev
75 , fromStreamDN
75 , fromStreamDN
76 , fromStreamD
76 , fromStreamD
77+ , fromPureStreamN
77 , fromPureStream
78 , fromPureStream
78
79
79 -- ** Random writes
80 -- ** Random writes
@@ -2028,6 +2029,13 @@ pinnedFromListN n xs = fromStreamDNAs Pinned n $ D.fromList xs
2028fromListRevN :: (MonadIO m, Unbox a) => Int -> [a] -> m (MutArray a)
2029fromListRevN :: (MonadIO m, Unbox a) => Int -> [a] -> m (MutArray a)
2029fromListRevN n xs = D.fold (writeRevN n) $ D.fromList xs
2030fromListRevN n xs = D.fold (writeRevN n) $ D.fromList xs
2030
2031
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+
2031-- | Convert a pure stream in Identity monad to a mutable array.
2039-- | Convert a pure stream in Identity monad to a mutable array.
2032{-# INLINABLE fromPureStream #-}
2040{-# INLINABLE fromPureStream #-}
2033fromPureStream :: (MonadIO m, Unbox a) => Stream Identity a -> m (MutArray a)
2041fromPureStream :: (MonadIO m, Unbox a) => Stream Identity a -> m (MutArray a)