|
| Data.Vector.Fusion.Stream | | Portability | non-portable | | Stability | experimental | | Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |
|
|
|
|
|
| Description |
| Streams for stream fusion
|
|
| Synopsis |
|
| | | type Stream = Stream Id | | | type MStream = Stream | | | inplace :: (forall m. Monad m => Stream m a -> Stream m b) -> Stream a -> Stream b | | | size :: Stream a -> Size | | | sized :: Stream a -> Size -> Stream a | | | length :: Stream a -> Int | | | null :: Stream a -> Bool | | | empty :: Stream a | | | singleton :: a -> Stream a | | | cons :: a -> Stream a -> Stream a | | | snoc :: Stream a -> a -> Stream a | | | replicate :: Int -> a -> Stream a | | | generate :: Int -> (Int -> a) -> Stream a | | | (++) :: Stream a -> Stream a -> Stream a | | | head :: Stream a -> a | | | last :: Stream a -> a | | | (!!) :: Stream a -> Int -> a | | | slice :: Int -> Int -> Stream a -> Stream a | | | init :: Stream a -> Stream a | | | tail :: Stream a -> Stream a | | | take :: Int -> Stream a -> Stream a | | | drop :: Int -> Stream a -> Stream a | | | map :: (a -> b) -> Stream a -> Stream b | | | concatMap :: (a -> Stream b) -> Stream a -> Stream b | | | flatten :: (a -> s) -> (s -> Step s b) -> Size -> Stream a -> Stream b | | | unbox :: Stream (Box a) -> Stream a | | | indexed :: Stream a -> Stream (Int, a) | | | indexedR :: Int -> Stream a -> Stream (Int, a) | | | zipWith :: (a -> b -> c) -> Stream a -> Stream b -> Stream c | | | zipWith3 :: (a -> b -> c -> d) -> Stream a -> Stream b -> Stream c -> Stream d | | | zipWith4 :: (a -> b -> c -> d -> e) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e | | | zipWith5 :: (a -> b -> c -> d -> e -> f) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f | | | zipWith6 :: (a -> b -> c -> d -> e -> f -> g) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f -> Stream g | | | zip :: Stream a -> Stream b -> Stream (a, b) | | | zip3 :: Stream a -> Stream b -> Stream c -> Stream (a, b, c) | | | zip4 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream (a, b, c, d) | | | zip5 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream (a, b, c, d, e) | | | zip6 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f -> Stream (a, b, c, d, e, f) | | | filter :: (a -> Bool) -> Stream a -> Stream a | | | takeWhile :: (a -> Bool) -> Stream a -> Stream a | | | dropWhile :: (a -> Bool) -> Stream a -> Stream a | | | elem :: Eq a => a -> Stream a -> Bool | | | notElem :: Eq a => a -> Stream a -> Bool | | | find :: (a -> Bool) -> Stream a -> Maybe a | | | findIndex :: (a -> Bool) -> Stream a -> Maybe Int | | | foldl :: (a -> b -> a) -> a -> Stream b -> a | | | foldl1 :: (a -> a -> a) -> Stream a -> a | | | foldl' :: (a -> b -> a) -> a -> Stream b -> a | | | foldl1' :: (a -> a -> a) -> Stream a -> a | | | foldr :: (a -> b -> b) -> b -> Stream a -> b | | | foldr1 :: (a -> a -> a) -> Stream a -> a | | | and :: Stream Bool -> Bool | | | or :: Stream Bool -> Bool | | | unfoldr :: (s -> Maybe (a, s)) -> s -> Stream a | | | unfoldrN :: Int -> (s -> Maybe (a, s)) -> s -> Stream a | | | prescanl :: (a -> b -> a) -> a -> Stream b -> Stream a | | | prescanl' :: (a -> b -> a) -> a -> Stream b -> Stream a | | | postscanl :: (a -> b -> a) -> a -> Stream b -> Stream a | | | postscanl' :: (a -> b -> a) -> a -> Stream b -> Stream a | | | scanl :: (a -> b -> a) -> a -> Stream b -> Stream a | | | scanl' :: (a -> b -> a) -> a -> Stream b -> Stream a | | | scanl1 :: (a -> a -> a) -> Stream a -> Stream a | | | scanl1' :: (a -> a -> a) -> Stream a -> Stream a | | | enumFromStepN :: Num a => a -> a -> Int -> Stream a | | | enumFromTo :: Enum a => a -> a -> Stream a | | | enumFromThenTo :: Enum a => a -> a -> a -> Stream a | | | toList :: Stream a -> [a] | | | fromList :: [a] -> Stream a | | | fromListN :: Int -> [a] -> Stream a | | | unsafeFromList :: Size -> [a] -> Stream a | | | liftStream :: Monad m => Stream a -> Stream m a | | | mapM :: Monad m => (a -> m b) -> Stream a -> Stream m b | | | mapM_ :: Monad m => (a -> m b) -> Stream a -> m () | | | zipWithM :: Monad m => (a -> b -> m c) -> Stream a -> Stream b -> Stream m c | | | zipWithM_ :: Monad m => (a -> b -> m c) -> Stream a -> Stream b -> m () | | | filterM :: Monad m => (a -> m Bool) -> Stream a -> Stream m a | | | foldM :: Monad m => (a -> b -> m a) -> a -> Stream b -> m a | | | fold1M :: Monad m => (a -> a -> m a) -> Stream a -> m a | | | foldM' :: Monad m => (a -> b -> m a) -> a -> Stream b -> m a | | | fold1M' :: Monad m => (a -> a -> m a) -> Stream a -> m a | | | eq :: Eq a => Stream a -> Stream a -> Bool | | | cmp :: Ord a => Stream a -> Stream a -> Ordering |
|
|
|
| Types
|
|
| data Step s a |
| Result of taking a single step in a stream
| | Constructors | | Yield a s | a new element and a new seed
| | Skip s | just a new seed
| | Done | end of stream
|
|
|
|
| type Stream = Stream Id |
| The type of pure streams
|
|
| type MStream = Stream |
| Alternative name for monadic streams
|
|
| In-place markers
|
|
| inplace :: (forall m. Monad m => Stream m a -> Stream m b) -> Stream a -> Stream b |
|
| Size hints
|
|
| size :: Stream a -> Size |
| Size hint of a Stream
|
|
| sized :: Stream a -> Size -> Stream a |
| Attach a Size hint to a Stream
|
|
| Length information
|
|
| length :: Stream a -> Int |
| Length of a Stream
|
|
| null :: Stream a -> Bool |
| Check if a Stream is empty
|
|
| Construction
|
|
| empty :: Stream a |
| Empty Stream
|
|
| singleton :: a -> Stream a |
| Singleton Stream
|
|
| cons :: a -> Stream a -> Stream a |
| Prepend an element
|
|
| snoc :: Stream a -> a -> Stream a |
| Append an element
|
|
| replicate :: Int -> a -> Stream a |
| Replicate a value to a given length
|
|
| generate :: Int -> (Int -> a) -> Stream a |
| Generate a stream from its indices
|
|
| (++) :: Stream a -> Stream a -> Stream a |
| Concatenate two Streams
|
|
| Accessing individual elements
|
|
| head :: Stream a -> a |
| First element of the Stream or error if empty
|
|
| last :: Stream a -> a |
| Last element of the Stream or error if empty
|
|
| (!!) :: Stream a -> Int -> a |
| Element at the given position
|
|
| Substreams
|
|
| slice |
| :: Int | starting index
| | -> Int | length
| | -> Stream a | | | -> Stream a | | | Extract a substream of the given length starting at the given position.
|
|
|
| init :: Stream a -> Stream a |
| All but the last element
|
|
| tail :: Stream a -> Stream a |
| All but the first element
|
|
| take :: Int -> Stream a -> Stream a |
| The first n elements
|
|
| drop :: Int -> Stream a -> Stream a |
| All but the first n elements
|
|
| Mapping
|
|
| map :: (a -> b) -> Stream a -> Stream b |
| Map a function over a Stream
|
|
| concatMap :: (a -> Stream b) -> Stream a -> Stream b |
|
| flatten :: (a -> s) -> (s -> Step s b) -> Size -> Stream a -> Stream b |
| Create a Stream of values from a Stream of streamable things
|
|
| unbox :: Stream (Box a) -> Stream a |
|
| Zipping
|
|
| indexed :: Stream a -> Stream (Int, a) |
| Pair each element in a Stream with its index
|
|
| indexedR :: Int -> Stream a -> Stream (Int, a) |
| Pair each element in a Stream with its index, starting from the right
and counting down
|
|
| zipWith :: (a -> b -> c) -> Stream a -> Stream b -> Stream c |
| Zip two Streams with the given function
|
|
| zipWith3 :: (a -> b -> c -> d) -> Stream a -> Stream b -> Stream c -> Stream d |
| Zip three Streams with the given function
|
|
| zipWith4 :: (a -> b -> c -> d -> e) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e |
|
| zipWith5 :: (a -> b -> c -> d -> e -> f) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f |
|
| zipWith6 :: (a -> b -> c -> d -> e -> f -> g) -> Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f -> Stream g |
|
| zip :: Stream a -> Stream b -> Stream (a, b) |
|
| zip3 :: Stream a -> Stream b -> Stream c -> Stream (a, b, c) |
|
| zip4 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream (a, b, c, d) |
|
| zip5 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream (a, b, c, d, e) |
|
| zip6 :: Stream a -> Stream b -> Stream c -> Stream d -> Stream e -> Stream f -> Stream (a, b, c, d, e, f) |
|
| Filtering
|
|
| filter :: (a -> Bool) -> Stream a -> Stream a |
| Drop elements which do not satisfy the predicate
|
|
| takeWhile :: (a -> Bool) -> Stream a -> Stream a |
| Longest prefix of elements that satisfy the predicate
|
|
| dropWhile :: (a -> Bool) -> Stream a -> Stream a |
| Drop the longest prefix of elements that satisfy the predicate
|
|
| Searching
|
|
| elem :: Eq a => a -> Stream a -> Bool |
| Check whether the Stream contains an element
|
|
| notElem :: Eq a => a -> Stream a -> Bool |
| Inverse of elem
|
|
| find :: (a -> Bool) -> Stream a -> Maybe a |
| Yield Just the first element matching the predicate or Nothing if no
such element exists.
|
|
| findIndex :: (a -> Bool) -> Stream a -> Maybe Int |
| Yield Just the index of the first element matching the predicate or
Nothing if no such element exists.
|
|
| Folding
|
|
| foldl :: (a -> b -> a) -> a -> Stream b -> a |
| Left fold
|
|
| foldl1 :: (a -> a -> a) -> Stream a -> a |
| Left fold on non-empty Streams
|
|
| foldl' :: (a -> b -> a) -> a -> Stream b -> a |
| Left fold with strict accumulator
|
|
| foldl1' :: (a -> a -> a) -> Stream a -> a |
| Left fold on non-empty Streams with strict accumulator
|
|
| foldr :: (a -> b -> b) -> b -> Stream a -> b |
| Right fold
|
|
| foldr1 :: (a -> a -> a) -> Stream a -> a |
| Right fold on non-empty Streams
|
|
| Specialised folds
|
|
| and :: Stream Bool -> Bool |
|
| or :: Stream Bool -> Bool |
|
| Unfolding
|
|
| unfoldr :: (s -> Maybe (a, s)) -> s -> Stream a |
| Unfold
|
|
| unfoldrN :: Int -> (s -> Maybe (a, s)) -> s -> Stream a |
| Unfold at most n elements
|
|
| Scans
|
|
| prescanl :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Prefix scan
|
|
| prescanl' :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Prefix scan with strict accumulator
|
|
| postscanl :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Suffix scan
|
|
| postscanl' :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Suffix scan with strict accumulator
|
|
| scanl :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Haskell-style scan
|
|
| scanl' :: (a -> b -> a) -> a -> Stream b -> Stream a |
| Haskell-style scan with strict accumulator
|
|
| scanl1 :: (a -> a -> a) -> Stream a -> Stream a |
| Scan over a non-empty Stream
|
|
| scanl1' :: (a -> a -> a) -> Stream a -> Stream a |
| Scan over a non-empty Stream with a strict accumulator
|
|
| Enumerations
|
|
| enumFromStepN :: Num a => a -> a -> Int -> Stream a |
| Yield a Stream of the given length containing the values x, x+y,
x+y+y etc.
|
|
| enumFromTo :: Enum a => a -> a -> Stream a |
Enumerate values
WARNING: This operations can be very inefficient. If at all possible, use
enumFromStepN instead.
|
|
| enumFromThenTo :: Enum a => a -> a -> a -> Stream a |
Enumerate values with a given step.
WARNING: This operations is very inefficient. If at all possible, use
enumFromStepN instead.
|
|
| Conversions
|
|
| toList :: Stream a -> [a] |
| Convert a Stream to a list
|
|
| fromList :: [a] -> Stream a |
| Create a Stream from a list
|
|
| fromListN :: Int -> [a] -> Stream a |
Create a Stream from the first n elements of a list
fromListN n xs = fromList (take n xs)
|
|
| unsafeFromList :: Size -> [a] -> Stream a |
|
| liftStream :: Monad m => Stream a -> Stream m a |
| Convert a pure stream to a monadic stream
|
|
| Monadic combinators
|
|
| mapM :: Monad m => (a -> m b) -> Stream a -> Stream m b |
| Apply a monadic action to each element of the stream, producing a monadic
stream of results
|
|
| mapM_ :: Monad m => (a -> m b) -> Stream a -> m () |
| Apply a monadic action to each element of the stream
|
|
| zipWithM :: Monad m => (a -> b -> m c) -> Stream a -> Stream b -> Stream m c |
|
| zipWithM_ :: Monad m => (a -> b -> m c) -> Stream a -> Stream b -> m () |
|
| filterM :: Monad m => (a -> m Bool) -> Stream a -> Stream m a |
| Yield a monadic stream of elements that satisfy the monadic predicate
|
|
| foldM :: Monad m => (a -> b -> m a) -> a -> Stream b -> m a |
| Monadic fold
|
|
| fold1M :: Monad m => (a -> a -> m a) -> Stream a -> m a |
| Monadic fold over non-empty stream
|
|
| foldM' :: Monad m => (a -> b -> m a) -> a -> Stream b -> m a |
| Monadic fold with strict accumulator
|
|
| fold1M' :: Monad m => (a -> a -> m a) -> Stream a -> m a |
| Monad fold over non-empty stream with strict accumulator
|
|
| eq :: Eq a => Stream a -> Stream a -> Bool |
| Check if two Streams are equal
|
|
| cmp :: Ord a => Stream a -> Stream a -> Ordering |
| Lexicographically compare two Streams
|
|
| Produced by Haddock version 2.7.2 |