on master help sign in
Add readSlice in PrimArray
806364fadithyaov
src/Streamly/Internal/Data/Prim/Array.hs+9
@@ -33,6 +33,7 @@ module Streamly.Internal.Data.Prim.Array
33 , toStream
33 , toStream
34 , toStreamRev
34 , toStreamRev
35 , read
35 , read
36+ , readSlice
36
37
37 , fromListN
38 , fromListN
38 , fromList
39 , fromList
@@ -188,3 +189,11 @@ read = Unfold step inject
188 | i == length arr = return D.Stop
189 | i == length arr = return D.Stop
189 step (arr, i) = return $ D.Yield (indexPrimArray arr i) (arr, i + 1)
190 step (arr, i) = return $ D.Yield (indexPrimArray arr i) (arr, i + 1)
190
191
192+{-# INLINE_NORMAL readSlice #-}
193+readSlice :: (Prim a, Monad m) => Int -> Int -> Unfold m (PrimArray a) a
194+readSlice off len = Unfold step inject
195+ where
196+ inject arr = return (arr, off)
197+ step (arr, i)
198+ | i == min (off + len) (length arr) = return D.Stop
199+ step (arr, i) = return $ D.Yield (indexPrimArray arr i) (arr, i + 1)
streamly.cabal+1−4
@@ -275,6 +275,7 @@ library
275 other-modules:
275 other-modules:
276 Streamly.Data.Array
276 Streamly.Data.Array
277 , Streamly.Data.SmallArray
277 , Streamly.Data.SmallArray
278+ , Streamly.Data.Prim.Array
278
279
279 -- Memory storage
280 -- Memory storage
280 Streamly.Memory.Malloc
281 Streamly.Memory.Malloc
@@ -284,13 +285,9 @@ library
284 , Streamly.FileSystem.FDIO
285 , Streamly.FileSystem.FDIO
285 , Streamly.FileSystem.FD
286 , Streamly.FileSystem.FD
286
287
287− , Streamly.Data.Prim.Array
288−
289 exposed-modules:
288 exposed-modules:
290 Streamly.Prelude
289 Streamly.Prelude
291 , Streamly
290 , Streamly
292− , Streamly.Data.Array
293− , Streamly.Data.SmallArray
294 , Streamly.Data.Fold
291 , Streamly.Data.Fold
295 , Streamly.Data.Unfold
292 , Streamly.Data.Unfold
296 , Streamly.Data.Unicode.Stream
293 , Streamly.Data.Unicode.Stream