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问题.