Fusible slicing
[darcs-mirrors/vector.git] / Data / Vector / Stream.hs
index cd77330..d52f8df 100644 (file)
@@ -31,7 +31,7 @@ module Data.Vector.Stream (
   head, last, (!!),
 
   -- * Substreams
-  init, tail, take, drop,
+  extract, init, tail, take, drop,
 
   -- * Mapping and zipping
   map, zipWith,
@@ -207,6 +207,13 @@ s !! i = head (drop i s)
 -- Substreams
 -- ----------
 
+-- | Extract a substream of the given length starting at the given position.
+extract :: Stream a -> Int   -- ^ starting index
+                    -> Int   -- ^ length
+                    -> Stream a
+{-# INLINE extract #-}
+extract s i n = take n (drop i s)
+
 -- | All but the last element
 init :: Stream a -> Stream a
 {-# INLINE_STREAM init #-}