我试图理解monads的概念,我想知道这个代码是否是这个概念的实现(在JavaScript中).
我有函数M返回具有set方法的新对象,该方法创建包装器方法
var foo = M().set('getX', function() {
return this.x;
}).set('setX', function(x) {
this.x = x;
}).set('addX', function(x) {
this.x += x;
});
Run Code Online (Sandbox Code Playgroud)
然后我可以链接foo的方法
foo.setX(10).addX(20).addX(30).getX()
Run Code Online (Sandbox Code Playgroud)
将返回60
如果我有方法对象并使用此对象调用M,则相同.
var foo = {
x: 10,
add: function(x) {
this.x += x;
}
};
M(foo).add(10).add(20).add(30).x
Run Code Online (Sandbox Code Playgroud)
将返回70
函数包含在M对象中,因此方法内的this context始终是M对象.
f = M({x: 20}).set('getX', function() {
return this.x;
}).set('addX', function(x) {
this.x += x;
}).addX(10).getX
Run Code Online (Sandbox Code Playgroud)
所以f是由M包裹的对象的上下文的函数 - 如果我调用f()它将返回30.
我理解正确吗?M是monad吗?
编辑修改后的代码在github上https://github.com/jcubic/monadic