Awesome
Delimted continuation monad and monad transformer for Akh Javascript monad transformer library
The delimited continuation transformer, DContT
, layers delimited control over a monad. The base type, DCont
, provides delimited control on its own.
The delimited continuation transformer is a monad, functor, and applicative functor.
# To use as standalone package
$ npm install --save akh.dcont
# To use as part of akh library
$ npm install --save akh
Usage
DContT
and DCont
implements the Fantasy Land monad, function, and applicative functor interfaces.
// Delimited continuation monad
require('akh.dcont').DCont
require('akh').DCont
// Delimited continuation monad transformer
require('akh.dcont').DContT
require('akh').DContT
DCont.run(m, k)
, m.run(k)
Perform a delimited continuation computation m
and complete with outer continuation k
.
const liftM2 = require('akh').liftM2
const dcont = require('akh').DCont
var list = liftM2.bind(null, (x, y) -> [x, y])
const c = dcont.reset((p) =>
liftM2((x, y) => x + y,
dcont.shift(p, k =>
list(k(of(1)), k(of(2))),
dcont.shift(p, k =>
list(k(of(10)), k(of(20))))
dcont.run(c, console.log) // logs: [[11, 21], [12, 22]]
DContT.run(m, k)
Same as DContT::run
but for transformed types
Delimited Control Interface
All DCont operations and methods are defined on both the type and its instances.
M.newPrompt
Create a new unique prompt that can be used to delimit a continuation.
M.pushPrompt(prompt, c)
Push prompt
on to the control stack, delimiting the continuation, and evaluate computation c
.
M.withSubCont(prompt, f)
Capture the continuation delimited by prompt
and call f
with it. f
maps the delimited continuation to a computation. The delimited control structure passed to f
should be considered opaque.
M.pushSubCont(subk, c)
Push an entire sub continuation sunk
onto the stack and evaluate computation c
.
M.reset(f)
Delimit a continuation, calling f
with delimiting prompt. f
maps the prompt to a computation that is performed inside the delimited context.
M.shift(p, f)
Capture the continuation delimited by p
, reify the continuation, and pass it to f
. f
can invoke the reified continuation with a computation to evaluate the rest of the delimited continuation, or return a computation directly to break out.
Contributing
Contributions are welcome.
To get started:
$ cd akh-dcont
$ npm install # install dev packages
$ npm test # run tests