Module
Control.Coroutine.Aff
- Package
- purescript-aff-coroutines
- Repository
- purescript-contrib/purescript-aff-coroutines
This module defines functions for creating coroutines on top of the Aff monad.
The Aff monad only supports actions which return a single value, asynchronously, so this
module provides a principled way to deal with asynchronous streams of values, and asynchronous consumers
of streamed data.
#produce Source
produce :: forall eff r a. ((Either a r -> Eff (avar :: AVAR | eff) Unit) -> Eff (avar :: AVAR | eff) Unit) -> Producer a (Aff (avar :: AVAR | eff)) rCreate a Producer using an asynchronous callback.
The callback should provide zero or more values of type a, which will be
emitted by the Producer, terminated by an optional value of type r. No values
should be provided after a value of type r has been provided.
For example:
produce \emit -> do
log "Working..."
emit (Left "progress")
log "Done!"
emit (Right "finished")
#produceAff Source
produceAff :: forall eff r a. ((Either a r -> Aff (avar :: AVAR | eff) Unit) -> Aff (avar :: AVAR | eff) Unit) -> Producer a (Aff (avar :: AVAR | eff)) rA variant of produce where the setup and callback functions use the Aff
monad. This can be helpful in certain cases.
For example:
produceAff \emit -> do
later' 1000 $ emit $ Left "progress"
later' 1000 $ emit $ Right "finished"
- Modules
- Control.
Coroutine. Aff