Reader 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 => g(this.run(e))) } bind(g) { return new Reader(e => g(this.run(e)).run(e)) } } const returnR = a => new Reader(_ => a) const ask = new Reader(x => x) const comp3 = v => ask.bind(({myNum}) => returnR(myNum * v)) const comp2 = _ => ask.bind(({myNum}) => returnR(myNum * 3) ) console.log( comp2().bind(comp3).fmap(x => x * 100).run({myNum: 5}) )
Editor Settings
Theme
Key bindings
Full width
Lines