Haskell中的Comonad类型类是什么?

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

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


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

  • 评估细胞自动机是共同的。 特别是,“无论何时你看到大量的数据结构都是通过大量小而相似的计算拼凑在一起的,那么我们很可能会遇到一个共同的问题”。
  • 序列,流和片段
  • Comonads在日常生活中

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

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

    考虑monadic操作:

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

    颠倒弯曲的箭头,你会得到一些共同的操作:

    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 (>>=)参数槽的箭头, extractextend也是如此。 Monad / Comonad法则规定,当您将returnextract放入该插槽时,结果就是身份箭头。 法律是相同的,“只是箭头翻转”。 这是一个超级handwavey的答案,但希望它提供了一些见解。

    链接地址: http://www.djcxy.com/p/43467.html

    上一篇: What is the Comonad typeclass in Haskell?

    下一篇: Should I use typeclasses or not?