Haskell中的Comonad类型类是什么?

时间:2011-12-08 09:08:01

标签: haskell typeclass comonad

Haskell中的Comonad类型类是什么?与来自Control.Comonad in the comonad package的Comonad一样(也欢迎提供Comonad类型类的任何其他软件包的解释)。我模糊地听说过Comonad,但我真正知道的是提供extract :: w a -> a,与Monad的return :: a -> m a平行。

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

2 个答案:

答案 0 :(得分:78)

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

  1. Evaluating cellular automata is comonadic。特别是,“每当你看到大量数据结构从大量小而类似的计算拼凑在一起时,我们就很有可能处理一个comonad”。
  2. Sequences, streams, and segments
  3. Comonads in everyday life

答案 1 :(得分:20)

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

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

考虑monadic操作:

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 (>>=)的参数槽的箭头,extract和{{1}也是如此}。 Monad / comonad法律规定,当您将extendreturn放入该广告位时,结果就是标识箭头。法律是相同的,“只是用箭头翻转”。这是一个超级手听的答案,但希望它能提供一些见解。