|
Data.Vector.Fusion.Stream.Monadic | Portability | non-portable | Stability | experimental | Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |
|
|
|
|
|
Description |
Monadic stream combinators.
|
|
Synopsis |
|
data Stream m a = forall s . Stream (s -> m (Step s a)) s Size | | | | size :: Stream m a -> Size | | sized :: Stream m a -> Size -> Stream m a | | length :: Monad m => Stream m a -> m Int | | null :: Monad m => Stream m a -> m Bool | | empty :: Monad m => Stream m a | | singleton :: Monad m => a -> Stream m a | | cons :: Monad m => a -> Stream m a -> Stream m a | | snoc :: Monad m => Stream m a -> a -> Stream m a | | replicate :: Monad m => Int -> a -> Stream m a | | replicateM :: Monad m => Int -> m a -> Stream m a | | generate :: Monad m => Int -> (Int -> a) -> Stream m a | | generateM :: Monad m => Int -> (Int -> m a) -> Stream m a | | (++) :: Monad m => Stream m a -> Stream m a -> Stream m a | | head :: Monad m => Stream m a -> m a | | last :: Monad m => Stream m a -> m a | | (!!) :: Monad m => Stream m a -> Int -> m a | | slice :: Monad m => Int -> Int -> Stream m a -> Stream m a | | init :: Monad m => Stream m a -> Stream m a | | tail :: Monad m => Stream m a -> Stream m a | | take :: Monad m => Int -> Stream m a -> Stream m a | | drop :: Monad m => Int -> Stream m a -> Stream m a | | map :: Monad m => (a -> b) -> Stream m a -> Stream m b | | mapM :: Monad m => (a -> m b) -> Stream m a -> Stream m b | | mapM_ :: Monad m => (a -> m b) -> Stream m a -> m () | | trans :: (Monad m, Monad m') => (forall a. m a -> m' a) -> Stream m a -> Stream m' a | | unbox :: Monad m => Stream m (Box a) -> Stream m a | | concatMap :: Monad m => (a -> Stream m b) -> Stream m a -> Stream m b | | flatten :: Monad m => (a -> m s) -> (s -> m (Step s b)) -> Size -> Stream m a -> Stream m b | | indexed :: Monad m => Stream m a -> Stream m (Int, a) | | indexedR :: Monad m => Int -> Stream m a -> Stream m (Int, a) | | zipWithM_ :: Monad m => (a -> b -> m c) -> Stream m a -> Stream m b -> m () | | zipWithM :: Monad m => (a -> b -> m c) -> Stream m a -> Stream m b -> Stream m c | | zipWith3M :: Monad m => (a -> b -> c -> m d) -> Stream m a -> Stream m b -> Stream m c -> Stream m d | | zipWith4M :: Monad m => (a -> b -> c -> d -> m e) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e | | zipWith5M :: Monad m => (a -> b -> c -> d -> e -> m f) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f | | zipWith6M :: Monad m => (a -> b -> c -> d -> e -> f -> m g) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m g | | zipWith :: Monad m => (a -> b -> c) -> Stream m a -> Stream m b -> Stream m c | | zipWith3 :: Monad m => (a -> b -> c -> d) -> Stream m a -> Stream m b -> Stream m c -> Stream m d | | zipWith4 :: Monad m => (a -> b -> c -> d -> e) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e | | zipWith5 :: Monad m => (a -> b -> c -> d -> e -> f) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f | | zipWith6 :: Monad m => (a -> b -> c -> d -> e -> f -> g) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m g | | zip :: Monad m => Stream m a -> Stream m b -> Stream m (a, b) | | zip3 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m (a, b, c) | | zip4 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m (a, b, c, d) | | zip5 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m (a, b, c, d, e) | | zip6 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m (a, b, c, d, e, f) | | filter :: Monad m => (a -> Bool) -> Stream m a -> Stream m a | | filterM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a | | takeWhile :: Monad m => (a -> Bool) -> Stream m a -> Stream m a | | takeWhileM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a | | dropWhile :: Monad m => (a -> Bool) -> Stream m a -> Stream m a | | dropWhileM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a | | elem :: (Monad m, Eq a) => a -> Stream m a -> m Bool | | notElem :: (Monad m, Eq a) => a -> Stream m a -> m Bool | | find :: Monad m => (a -> Bool) -> Stream m a -> m (Maybe a) | | findM :: Monad m => (a -> m Bool) -> Stream m a -> m (Maybe a) | | findIndex :: Monad m => (a -> Bool) -> Stream m a -> m (Maybe Int) | | findIndexM :: Monad m => (a -> m Bool) -> Stream m a -> m (Maybe Int) | | foldl :: Monad m => (a -> b -> a) -> a -> Stream m b -> m a | | foldlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a | | foldl1 :: Monad m => (a -> a -> a) -> Stream m a -> m a | | foldl1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a | | foldM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a | | fold1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a | | foldl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> m a | | foldlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a | | foldl1' :: Monad m => (a -> a -> a) -> Stream m a -> m a | | foldl1M' :: Monad m => (a -> a -> m a) -> Stream m a -> m a | | foldM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a | | fold1M' :: Monad m => (a -> a -> m a) -> Stream m a -> m a | | foldr :: Monad m => (a -> b -> b) -> b -> Stream m a -> m b | | foldrM :: Monad m => (a -> b -> m b) -> b -> Stream m a -> m b | | foldr1 :: Monad m => (a -> a -> a) -> Stream m a -> m a | | foldr1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a | | and :: Monad m => Stream m Bool -> m Bool | | or :: Monad m => Stream m Bool -> m Bool | | concatMapM :: Monad m => (a -> m (Stream m b)) -> Stream m a -> Stream m b | | unfoldr :: Monad m => (s -> Maybe (a, s)) -> s -> Stream m a | | unfoldrM :: Monad m => (s -> m (Maybe (a, s))) -> s -> Stream m a | | unfoldrN :: Monad m => Int -> (s -> Maybe (a, s)) -> s -> Stream m a | | unfoldrNM :: Monad m => Int -> (s -> m (Maybe (a, s))) -> s -> Stream m a | | prescanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | prescanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | prescanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | prescanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | postscanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | postscanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | postscanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | postscanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | scanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | scanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | scanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a | | scanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a | | scanl1 :: Monad m => (a -> a -> a) -> Stream m a -> Stream m a | | scanl1M :: Monad m => (a -> a -> m a) -> Stream m a -> Stream m a | | scanl1' :: Monad m => (a -> a -> a) -> Stream m a -> Stream m a | | scanl1M' :: Monad m => (a -> a -> m a) -> Stream m a -> Stream m a | | enumFromStepN :: (Num a, Monad m) => a -> a -> Int -> Stream m a | | enumFromTo :: (Enum a, Monad m) => a -> a -> Stream m a | | enumFromThenTo :: (Enum a, Monad m) => a -> a -> a -> Stream m a | | toList :: Monad m => Stream m a -> m [a] | | fromList :: Monad m => [a] -> Stream m a | | fromListN :: Monad m => Int -> [a] -> Stream m a | | unsafeFromList :: Monad m => Size -> [a] -> Stream m a |
|
|
Documentation |
|
data Stream m a |
Monadic streams
| Constructors | forall s . Stream (s -> m (Step s a)) s Size | |
| Instances | |
|
|
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
|
|
|
|
Size hints
|
|
size :: Stream m a -> Size |
Size hint of a Stream
|
|
sized :: Stream m a -> Size -> Stream m a |
Attach a Size hint to a Stream
|
|
Length
|
|
length :: Monad m => Stream m a -> m Int |
Length of a Stream
|
|
null :: Monad m => Stream m a -> m Bool |
Check if a Stream is empty
|
|
Construction
|
|
empty :: Monad m => Stream m a |
Empty Stream
|
|
singleton :: Monad m => a -> Stream m a |
Singleton Stream
|
|
cons :: Monad m => a -> Stream m a -> Stream m a |
Prepend an element
|
|
snoc :: Monad m => Stream m a -> a -> Stream m a |
Append an element
|
|
replicate :: Monad m => Int -> a -> Stream m a |
Replicate a value to a given length
|
|
replicateM :: Monad m => Int -> m a -> Stream m a |
Yield a Stream of values obtained by performing the monadic action the
given number of times
|
|
generate :: Monad m => Int -> (Int -> a) -> Stream m a |
|
generateM :: Monad m => Int -> (Int -> m a) -> Stream m a |
Generate a stream from its indices
|
|
(++) :: Monad m => Stream m a -> Stream m a -> Stream m a |
Concatenate two Streams
|
|
Accessing elements
|
|
head :: Monad m => Stream m a -> m a |
First element of the Stream or error if empty
|
|
last :: Monad m => Stream m a -> m a |
Last element of the Stream or error if empty
|
|
(!!) :: Monad m => Stream m a -> Int -> m a |
Element at the given position
|
|
Substreams
|
|
slice |
:: Monad m | | => Int | starting index
| -> Int | length
| -> Stream m a | | -> Stream m a | | Extract a substream of the given length starting at the given position.
|
|
|
init :: Monad m => Stream m a -> Stream m a |
All but the last element
|
|
tail :: Monad m => Stream m a -> Stream m a |
All but the first element
|
|
take :: Monad m => Int -> Stream m a -> Stream m a |
The first n elements
|
|
drop :: Monad m => Int -> Stream m a -> Stream m a |
All but the first n elements
|
|
Mapping
|
|
map :: Monad m => (a -> b) -> Stream m a -> Stream m b |
Map a function over a Stream
|
|
mapM :: Monad m => (a -> m b) -> Stream m a -> Stream m b |
Map a monadic function over a Stream
|
|
mapM_ :: Monad m => (a -> m b) -> Stream m a -> m () |
Execute a monadic action for each element of the Stream
|
|
trans :: (Monad m, Monad m') => (forall a. m a -> m' a) -> Stream m a -> Stream m' a |
Transform a Stream to use a different monad
|
|
unbox :: Monad m => Stream m (Box a) -> Stream m a |
|
concatMap :: Monad m => (a -> Stream m b) -> Stream m a -> Stream m b |
|
flatten :: Monad m => (a -> m s) -> (s -> m (Step s b)) -> Size -> Stream m a -> Stream m b |
Create a Stream of values from a Stream of streamable things
|
|
Zipping
|
|
indexed :: Monad m => Stream m a -> Stream m (Int, a) |
Pair each element in a Stream with its index
|
|
indexedR :: Monad m => Int -> Stream m a -> Stream m (Int, a) |
Pair each element in a Stream with its index, starting from the right
and counting down
|
|
zipWithM_ :: Monad m => (a -> b -> m c) -> Stream m a -> Stream m b -> m () |
|
zipWithM :: Monad m => (a -> b -> m c) -> Stream m a -> Stream m b -> Stream m c |
Zip two Streams with the given monadic function
|
|
zipWith3M :: Monad m => (a -> b -> c -> m d) -> Stream m a -> Stream m b -> Stream m c -> Stream m d |
|
zipWith4M :: Monad m => (a -> b -> c -> d -> m e) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e |
|
zipWith5M :: Monad m => (a -> b -> c -> d -> e -> m f) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f |
|
zipWith6M :: Monad m => (a -> b -> c -> d -> e -> f -> m g) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m g |
|
zipWith :: Monad m => (a -> b -> c) -> Stream m a -> Stream m b -> Stream m c |
|
zipWith3 :: Monad m => (a -> b -> c -> d) -> Stream m a -> Stream m b -> Stream m c -> Stream m d |
|
zipWith4 :: Monad m => (a -> b -> c -> d -> e) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e |
|
zipWith5 :: Monad m => (a -> b -> c -> d -> e -> f) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f |
|
zipWith6 :: Monad m => (a -> b -> c -> d -> e -> f -> g) -> Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m g |
|
zip :: Monad m => Stream m a -> Stream m b -> Stream m (a, b) |
|
zip3 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m (a, b, c) |
|
zip4 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m (a, b, c, d) |
|
zip5 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m (a, b, c, d, e) |
|
zip6 :: Monad m => Stream m a -> Stream m b -> Stream m c -> Stream m d -> Stream m e -> Stream m f -> Stream m (a, b, c, d, e, f) |
|
Filtering
|
|
filter :: Monad m => (a -> Bool) -> Stream m a -> Stream m a |
Drop elements which do not satisfy the predicate
|
|
filterM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a |
Drop elements which do not satisfy the monadic predicate
|
|
takeWhile :: Monad m => (a -> Bool) -> Stream m a -> Stream m a |
Longest prefix of elements that satisfy the predicate
|
|
takeWhileM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a |
Longest prefix of elements that satisfy the monadic predicate
|
|
dropWhile :: Monad m => (a -> Bool) -> Stream m a -> Stream m a |
Drop the longest prefix of elements that satisfy the predicate
|
|
dropWhileM :: Monad m => (a -> m Bool) -> Stream m a -> Stream m a |
Drop the longest prefix of elements that satisfy the monadic predicate
|
|
Searching
|
|
elem :: (Monad m, Eq a) => a -> Stream m a -> m Bool |
Check whether the Stream contains an element
|
|
notElem :: (Monad m, Eq a) => a -> Stream m a -> m Bool |
Inverse of elem
|
|
find :: Monad m => (a -> Bool) -> Stream m a -> m (Maybe a) |
Yield Just the first element that satisfies the predicate or Nothing
if no such element exists.
|
|
findM :: Monad m => (a -> m Bool) -> Stream m a -> m (Maybe a) |
Yield Just the first element that satisfies the monadic predicate or
Nothing if no such element exists.
|
|
findIndex :: Monad m => (a -> Bool) -> Stream m a -> m (Maybe Int) |
Yield Just the index of the first element that satisfies the predicate
or Nothing if no such element exists.
|
|
findIndexM :: Monad m => (a -> m Bool) -> Stream m a -> m (Maybe Int) |
Yield Just the index of the first element that satisfies the monadic
predicate or Nothing if no such element exists.
|
|
Folding
|
|
foldl :: Monad m => (a -> b -> a) -> a -> Stream m b -> m a |
Left fold
|
|
foldlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a |
Left fold with a monadic operator
|
|
foldl1 :: Monad m => (a -> a -> a) -> Stream m a -> m a |
Left fold over a non-empty Stream
|
|
foldl1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a |
Left fold over a non-empty Stream with a monadic operator
|
|
foldM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a |
Same as foldlM
|
|
fold1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a |
Same as foldl1M
|
|
foldl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> m a |
Left fold with a strict accumulator
|
|
foldlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a |
Left fold with a strict accumulator and a monadic operator
|
|
foldl1' :: Monad m => (a -> a -> a) -> Stream m a -> m a |
Left fold over a non-empty Stream with a strict accumulator
|
|
foldl1M' :: Monad m => (a -> a -> m a) -> Stream m a -> m a |
Left fold over a non-empty Stream with a strict accumulator and a
monadic operator
|
|
foldM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> m a |
Same as foldlM'
|
|
fold1M' :: Monad m => (a -> a -> m a) -> Stream m a -> m a |
Same as foldl1M'
|
|
foldr :: Monad m => (a -> b -> b) -> b -> Stream m a -> m b |
Right fold
|
|
foldrM :: Monad m => (a -> b -> m b) -> b -> Stream m a -> m b |
Right fold with a monadic operator
|
|
foldr1 :: Monad m => (a -> a -> a) -> Stream m a -> m a |
Right fold over a non-empty stream
|
|
foldr1M :: Monad m => (a -> a -> m a) -> Stream m a -> m a |
Right fold over a non-empty stream with a monadic operator
|
|
Specialised folds
|
|
and :: Monad m => Stream m Bool -> m Bool |
|
or :: Monad m => Stream m Bool -> m Bool |
|
concatMapM :: Monad m => (a -> m (Stream m b)) -> Stream m a -> Stream m b |
|
Unfolding
|
|
unfoldr :: Monad m => (s -> Maybe (a, s)) -> s -> Stream m a |
Unfold
|
|
unfoldrM :: Monad m => (s -> m (Maybe (a, s))) -> s -> Stream m a |
Unfold with a monadic function
|
|
unfoldrN :: Monad m => Int -> (s -> Maybe (a, s)) -> s -> Stream m a |
Unfold at most n elements
|
|
unfoldrNM :: Monad m => Int -> (s -> m (Maybe (a, s))) -> s -> Stream m a |
Unfold at most n elements with a monadic functions
|
|
Scans
|
|
prescanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Prefix scan
|
|
prescanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Prefix scan with a monadic operator
|
|
prescanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Prefix scan with strict accumulator
|
|
prescanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Prefix scan with strict accumulator and a monadic operator
|
|
postscanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Suffix scan
|
|
postscanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Suffix scan with a monadic operator
|
|
postscanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Suffix scan with strict accumulator
|
|
postscanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Suffix scan with strict acccumulator and a monadic operator
|
|
scanl :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Haskell-style scan
|
|
scanlM :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Haskell-style scan with a monadic operator
|
|
scanl' :: Monad m => (a -> b -> a) -> a -> Stream m b -> Stream m a |
Haskell-style scan with strict accumulator
|
|
scanlM' :: Monad m => (a -> b -> m a) -> a -> Stream m b -> Stream m a |
Haskell-style scan with strict accumulator and a monadic operator
|
|
scanl1 :: Monad m => (a -> a -> a) -> Stream m a -> Stream m a |
Scan over a non-empty Stream
|
|
scanl1M :: Monad m => (a -> a -> m a) -> Stream m a -> Stream m a |
Scan over a non-empty Stream with a monadic operator
|
|
scanl1' :: Monad m => (a -> a -> a) -> Stream m a -> Stream m a |
Scan over a non-empty Stream with a strict accumulator
|
|
scanl1M' :: Monad m => (a -> a -> m a) -> Stream m a -> Stream m a |
Scan over a non-empty Stream with a strict accumulator and a monadic
operator
|
|
Enumerations
|
|
enumFromStepN :: (Num a, Monad m) => a -> a -> Int -> Stream m a |
Yield a Stream of the given length containing the values x, x+y,
x+y+y etc.
|
|
enumFromTo :: (Enum a, Monad m) => a -> a -> Stream m a |
Enumerate values
WARNING: This operation can be very inefficient. If at all possible, use
enumFromStepN instead.
|
|
enumFromThenTo :: (Enum a, Monad m) => a -> a -> a -> Stream m a |
Enumerate values with a given step.
WARNING: This operation is very inefficient. If at all possible, use
enumFromStepN instead.
|
|
Conversions
|
|
toList :: Monad m => Stream m a -> m [a] |
Convert a Stream to a list
|
|
fromList :: Monad m => [a] -> Stream m a |
Convert a list to a Stream
|
|
fromListN :: Monad m => Int -> [a] -> Stream m a |
Convert the first n elements of a list to a Stream
|
|
unsafeFromList :: Monad m => Size -> [a] -> Stream m a |
Convert a list to a Stream with the given Size hint.
|
|
Produced by Haddock version 2.7.2 |