翻译连载 | 附录 B: 谦虚的 Monad-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇 (2)

既然 Monad 是一个类型,你可能认为我们应该定义 Maybe 作为一个要被实例化的类。这虽然是一种有效的方法,但是它引入了 this 绑定的问题,所以在这里我不想讨论;相反,我打算使用一个简单的函数和对象的实现方式。

以下是 Maybe 的最简单的实现:

var Maybe = { Just, Nothing, of/* 又称:unit,pure */: Just }; function Just(val) { return { map, chain, ap, inspect }; // ********************* function map(fn) { return Just( fn( val ) ); } // 又称:bind, flatMap function chain(fn) { return fn( val ); } function ap(anotherMonad) { return anotherMonad.map( val ); } function inspect() { return `Just(${ val })`; } } function Nothing() { return { map: Nothing, chain: Nothing, ap: Nothing, inspect }; // ********************* function inspect() { return "Nothing"; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxpxd.html