Copyright | (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King |
---|---|

License | BSD3 |

Maintainer | Alexis King <lexi.lambda@gmail.com> |

Stability | experimental |

Portability | GHC specific language extensions. |

Safe Haskell | None |

Language | Haskell2010 |

An effect to compose functions with the ability to yield.

Using http://okmij.org/ftp/Haskell/extensible/Eff1.hs as a starting point.

- data Yield a b c = Yield a (b -> c)
- yield :: Member (Yield a b) effs => a -> (b -> c) -> Eff effs c
- data Status effs a b r
- runC :: Eff (Yield a b ': effs) r -> Eff effs (Status effs a b r)
- interposeC :: Member (Yield a b) effs => Eff effs r -> Eff effs (Status effs a b r)
- replyC :: Yield a b c -> (c -> Eff effs (Status effs a b r)) -> Eff effs (Status effs a b r)

# Yield Control

A type representing a yielding of control.

Type variables have following meaning:

`a`

- The current type.
`b`

- The input to the continuation function.
`c`

- The output of the continuation.

Yield a (b -> c) |

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

Lifts a value and a function into the Coroutine effect.

# Handle Yield Effect

runC :: Eff (Yield a b ': effs) r -> Eff effs (Status effs a b r) Source #

Launch a coroutine and report its status.