什么是Haskell中的Comonadtypes类?

什么是Haskell中的Comonadtypes类? 如Comonad包中的Control.Comonad中的Comonad (也提供对提供Comonadtypes类的任何其他包的解释)。 我隐约听说过Comonad,但是我真正知道的是,它提供了extract :: wa -> a ,类似于Monad的return :: a -> ma

在“真实”的代码中注明Comonad的“真实生活”用法的加分。

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

  1. 评估细胞自动机是共同的 。 特别是,“无论何时你看到大量的数据结构都是由大量小而相似的计算拼凑在一起的,那么我们就很有可能处理一个共同的事情”。
  2. 序列,stream和段
  3. 在日常生活中的共同体

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

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

考虑一下monadic操作:

 return :: a ~> ma flip (>>=) :: (a ~> mb) -> (ma ~> mb) 

扭转波浪箭头,你会得到一些共同的操作:

 extract :: a <~ wa extend :: (a <~ wb) -> (wa <~ wb) 

(用正常的箭头写)

 extract :: wa -> a extend :: (wa -> b) -> wa -> wb 

请注意,在这种格式下, return是一个恰好适合flip (>>=)参数槽的箭头, extractextend也是如此。 Monad / comonad法则规定,当你将returnextract到这个槽中时,结果就是同一个箭头。 法律是一样的,“只是箭头翻转”。 这是一个超级handwavey的答案,但希望它提供了一些见解。