30

在您找到chain文档中:

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

那么这个chain函数会创建一个单子吗?

4

1 回答 1

39

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

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

的类型签名value是:

Wrapped a -> a

这些正是您需要的comonad。通常调用第一个函数,extend然后调用第二个函数extract

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

有关comonads 的更多信息,请参阅这个 Stackoverflow 问题

于 2012-05-04T14:18:35.013 回答