on master help sign in
Add clone combinators to array
9bda27aAdithya Kumar
core/src/Streamly/Internal/Data/Array/Type.hs+16
@@ -44,6 +44,10 @@ module Streamly.Internal.Data.Array.Type
44 -- * Split
44 -- * Split
45 , breakOn
45 , breakOn
46
46
47+ -- ** Cloning arrays
48+ , clone
49+ , pinnedClone
50+
47 -- * Elimination
51 -- * Elimination
48 , unsafeIndexIO
52 , unsafeIndexIO
49 , getIndexUnsafe
53 , getIndexUnsafe
@@ -303,6 +307,18 @@ fromStreamD :: forall m a. (MonadIO m, Unbox a)
303 => D.Stream m a -> m (Array a)
307 => D.Stream m a -> m (Array a)
304fromStreamD str = unsafeFreeze <$> MA.fromStreamD str
308fromStreamD str = unsafeFreeze <$> MA.fromStreamD str
305
309
310+-------------------------------------------------------------------------------
311+-- Cloning
312+-------------------------------------------------------------------------------
313+
314+{-# INLINE clone #-}
315+clone :: MonadIO m => Array a -> m (Array a)
316+clone = fmap unsafeFreeze . MA.clone . unsafeThaw
317+
318+{-# INLINE pinnedClone #-}
319+pinnedClone :: MonadIO m => Array a -> m (Array a)
320+pinnedClone = fmap unsafeFreeze . MA.pinnedClone . unsafeThaw
321+
306-------------------------------------------------------------------------------
322-------------------------------------------------------------------------------
307-- Streams of arrays
323-- Streams of arrays
308-------------------------------------------------------------------------------
324-------------------------------------------------------------------------------