haskell - underscore.js 中的 chain 函数是否创建了一个 monad?

标签 haskell functional-programming monads underscore.js comonad

the chain documentation你发现:

Calling chain on a wrapped object will cause all future method calls to return wrapped objects as well. When you've finished the computation, use value to retrieve the final value.

chain 也是如此函数创建一个 monad?

最佳答案

不,不是单子(monad),而是共单子(monad)!它将一个接受包装对象并返回普通值的函数转换为一个既接受又返回包装对象的函数。作为 Haskell 类型签名,将是:

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

value 的类型签名是:

Wrapped a -> a

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

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

参见this Stackoverflow question有关 comonad 的更多信息。

关于haskell - underscore.js 中的 chain 函数是否创建了一个 monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431999/

相关文章:

haskell - Cabal 在需要分析库时没有安装依赖项?

haskell - 为什么 Data.Binary 的 encodeFile 不偷懒?

haskell - 无法定义多个可执行文件

rust - 惯用地将值从一个 Vec 移动/排序到另一个

scala - 如何在 Scala 中使用 IO monad 实现短路

haskell - 为什么字符串不是枚举?

functional-programming - 学习方案宏。帮我写一个定义语法规则

python - 如何从正则表达式匹配中获取索引?

scala - Scala 中的选项 monad

haskell - 从应用 (<*>) 混淆中派生 monad 绑定(bind)