Copyright | (c) 2019 Composewell Technologies |
---|---|
License | BSD-3-Clause |
Maintainer | streamly@composewell.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- takeInterval :: MonadAsync m => Double -> Fold m a b -> Fold m a b
- intervalsOf :: MonadAsync m => Double -> Fold m a b -> Fold m b c -> Fold m a c
Trimming
takeInterval :: MonadAsync m => Double -> Fold m a b -> Fold m a b Source #
takeInterval n fold
uses fold
to fold the input items arriving within
a window of first n
seconds.
>>>
input = Stream.delay 0.1 $ Stream.fromList [1..]
>>>
Stream.fold (Fold.takeInterval 1.0 Fold.toList) input
[1,2,3,4,5,6,7,8,9,10,11]
Stops when fold
stops or when the timeout occurs. Note that the fold needs
an input after the timeout to stop. For example, if no input is pushed to
the fold until one hour after the timeout had occurred, then the fold will
be done only after consuming that input.
Pre-release
Splitting
intervalsOf :: MonadAsync m => Double -> Fold m a b -> Fold m b c -> Fold m a c Source #
Group the input stream into windows of n second each using the first fold and then fold the resulting groups using the second fold.
>>>
intervals = Fold.intervalsOf 0.5 Fold.toList Fold.toList
>>>
Stream.fold intervals $ Stream.delay 0.2 $ Stream.fromList [1..10]
[[1,2,3,4],[5,6,7],[8,9,10]]
intervalsOf n split = many (takeInterval n split)
Pre-release