モナド則 bind(unit(x), f) ≡ f(x) bind(m, unit) ≡ m bind(bind(m, f), g) ≡ bind(m, x ⇒ bind(f(x), g)) JavaScript Primise Monado return (unit) = Promise.resolve bind = Promise.prototype.then bind(unit(x), f) ≡ f(x) // bind(unit(x), f) Promise.resolve(1).then( (v) => console.log(v) ); // f(x) ((v) => console.log(v) )(1); bind(m, unit) ≡ m // bind(m, unit) var m = Promise.resolve(1); Promise.resolve(m).then((v) => console.log(v)) // m var m = Promise.resolve(1); m.then((v) => console.log(v) ) bind(bind(m, f), g) ≡ bind(m, x ⇒ bind(f(x), g)) var m = Promise.resolve(2); var f = (v) => Promise.resolve(v * 3); var g = (v) => Promise.resolve(v + 2); // bind(bind(m, f), g) m.then(f).then(g) .then((v) => console.log(v) ); // bind(m, x ⇒ bind(f(x), g)) m.then((x) => f(x).then(g)) .then((x) => console.log(x)) 参考 monado in javascript