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

jcu*_*bic 29 monads haskell functional-programming underscore.js comonad

chain文件你会发现:

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

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

Sjo*_*her 40

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

(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
Run Code Online (Sandbox Code Playgroud)

类型签名value是:

Wrapped a -> a
Run Code Online (Sandbox Code Playgroud)

这些正是您对comonad所需要的.通常调用第一个函数extend,第二个函数调用extract.

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

有关comonads的更多信息,请参阅此Stackoverflow问题.

  • 我喜欢这个答案; 我认为,如果你要解释下划线对象方法到类型的映射,那么你的意思会更加明显.如果我理解正确,方法通常是`Wrapped a - > b`s但是`chain`返回一个对象,其方法(除了`value`)都是`Wrapped a - > Wrapped b`s.我知道一点Haskell,但这个问题最初并没有被标记为Haskell,因此解释你的答案如何映射到JS库可能会有所帮助. (8认同)