相关疑难解决方法(0)

dropcore.js中的链函数是否会创建一个monad?

chain文件你会发现:

调用chain包装对象将导致所有将来的方法调用也返回包装对象.完成计算后,使用value检索最终值.

那么chain函数是否创建了一个monad?

monads haskell functional-programming underscore.js comonad

29
推荐指数
1
解决办法
2363
查看次数

这是一个单子吗?

我试图理解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

javascript monads functional-programming

13
推荐指数
1
解决办法
1246
查看次数