PromiseReader Monad

Run Settings
LanguageJavaScript
Language Version
Run Command
class Reader { constructor(f) { this.f = f } run(e) { return this.f(e) } fmap(g) { return new Reader(e => this.run(e).then(g)) } bind(g) { return new Reader(e => this.run(e).then(x => g(x).run(e))) } } const returnR = a => new Reader(_ => Promise.resolve(a)) const ask = new Reader(x => Promise.resolve(x)) const comp3 = v => ask.bind(({myNum}) => returnR(myNum * v)) const comp2 = _ => ask.bind(({myNum}) => returnR(myNum * 3) ) comp2().bind(comp3).fmap(x => x * 100).run({myNum: 5}).then(x => console.log(x))
Editor Settings
Theme
Key bindings
Full width
Lines