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

时间:2012-05-03 13:04:54

标签: haskell functional-programming monads underscore.js comonad

the chain documentation中,您会找到:

  

在包装对象上调用chain将导致所有将来的方法调用   也可以返回包装对象。当你完成了   计算,使用value来检索最终值。

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

1 个答案:

答案 0 :(得分:40)

不,不是monad,而是comonad!它转换一个函数,它接受一个包装对象并将一个普通值返回到一个函数中,该函数既获取又返回一个包装对象。作为Haskell类型的签名将是:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b)

value的类型签名是:

Wrapped a -> a

这些正是您对comonad所需要的。第一个函数通常称为extend,第二个函数通常称为extract

您可以将comonad视为具有一些额外上下文的值。这当然正是chain所做的。

有关comonads的更多信息,请参阅this Stackoverflow question