A seed with a buffer. It allows us to unread or return some data after reading it. Useful in backtracked parsing.
Modulestreamly-core-0.2.2Haskell2010
Streamly.Internal.Data.Producer
A Producer is an Unfold with an extract function added to extract
the state. It is more powerful but less general than an Unfold.
A Producer represents steps of a loop generating a sequence of elements. While unfolds are closed representation of imperative loops with some opaque internal state, producers are open loops with the state being accessible to the user.
Unlike an unfold, which runs a loop till completion, a producer can be stopped in the middle, its state can be extracted, examined, changed, and then it can be resumed later from the stopped state.
A producer can be used in places where a CPS stream would otherwise be needed, because the state of the loop can be passed around. However, it can be much more efficient than CPS because it allows stream fusion and unecessary function calls can be avoided.
- 3 types
- 16 values
- Packagestreamly-core-0.2.2
- Exports19
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceProducer.hs
Convert a producer to a producer from a buffered source. Any buffered data is read first and then the seed is unfolded.
Pre-release
Apply a parser repeatedly on a buffered source producer to generate a producer of parsed values.
Pre-release
Make a source from a seed value. The buffer would start as empty.
Pre-release
Return some unused data back to the source. The data is prepended (or consed) to the source.
Pre-release
Determine if the source is empty.
A Producer m a b is a generator of a stream of values of type b from a
seed of type a in Monad m.
Pre-release
Apply the second unfold to each output element of the first unfold and flatten the output in a single stream.
Pre-release
Convert a list of pure values to a Stream
Pre-release
Map the producer input to another value of the same type.
Pre-release
Interconvert the producer between two interconvertible input types.
Pre-release
Converting
2 declarationsSimplify a producer to an unfold.
Pre-release
Convert a StreamD stream into a producer.
Pre-release