extensible-effects-2.6.0.3: An Alternative to Monad Transformers

Control.Eff.Coroutine

Description

Coroutines implemented with extensible effects

Synopsis

Documentation

data Yield a b v where Source #

Co-routines The interface is intentionally chosen to be the same as in transf.hs

| The yield request: reporting a value of type e and suspending the coroutine. Resuming with the value of type b

Constructors

 Yield :: a -> Yield a b b

yield :: Member (Yield a b) r => a -> Eff r b Source #

Yield a value of type a and suspend the coroutine.

runC :: Eff (Yield a b ': r) w -> Eff r (Y r a b) Source #

Launch a thread and report its status

data Y r a w Source #

Status of a thread: done or reporting the value of the type a (For simplicity, a co-routine reports a value but accepts unit)

Type parameter r is the effect we're yielding from.

Type parameter a is the type that is yielded.

Type parameter w is the type of the value returned from the coroutine when it has completed.

Constructors

 Y a (w -> Eff r (Y r a w)) Done