109

Haskell 中的 Comonad 类型类是什么?与Comonad 包中 Control.Comonad 中的 Comonad 一样(也欢迎解释提供 Comonad 类型类的任何其他包)。我隐约听说过 Comonad,但我真正知道的是它提供了extract :: w a -> a,有点类似于 Monad 的return :: a -> m a

在“真实”代码中注意到“现实生活”中使用 Comonad 的奖励积分。

4

2 回答 2

84

这些链接可能会有所帮助:

  1. 评估元胞自动机是单子的。特别是,“每当您看到由大量小但相似的计算拼凑而成的大型数据结构时,我们很有可能正在处理一个共单子”。
  2. 序列、流和段
  3. 日常生活中的共生体
于 2011-12-08T09:40:29.807 回答
24

这并不能完全回答我的问题,但我想以答案格式提供一些相关信息:

“co”(松散地)意思是“翻转箭头”。这是一个粗略的视觉效果。

考虑一元操作:

return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)

反转波浪形的箭头,您将得到 comonadic 操作:

extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)

(用普通箭头写)

extract :: w a -> a
extend :: (w a -> b) -> w a -> w b

请注意,在这种格式中,return箭头是如何恰好适合 的参数槽的,对于和flip (>>=)也是如此。Monad/comonad 定律说,当你放入或放入那个槽时,结果是恒等箭头。法律是一样的,“只是箭头翻转了”。这是一个超级手动的答案,但希望它提供一些见解。extractextendreturnextract

于 2016-03-03T19:52:01.307 回答