@@ -44,6 +44,10 @@ module Streamly.Internal.Data.Array.Type
4444 -- * Split
4545 , breakOn
4646
47+ -- ** Cloning arrays
48+ , clone
49+ , pinnedClone
50+
4751 -- * Elimination
4852 , unsafeIndexIO
4953 , getIndexUnsafe
@@ -303,6 +307,18 @@ fromStreamD :: forall m a. (MonadIO m, Unbox a)
303307 => D.Stream m a -> m (Array a)
304308fromStreamD str = unsafeFreeze <$> MA.fromStreamD str
305309
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+
306322-------------------------------------------------------------------------------
307323-- Streams of arrays
308324-------------------------------------------------------------------------------