Haskell中的Comonad类型类是什么?

Haskell中的Comonad类型类是什么?,haskell,typeclass,comonad,Haskell,Typeclass,Comonad,Haskell中的Comonad类型类是什么?正如在Comonad from中一样(也欢迎对提供Comonad typeclass的任何其他包进行解释)。我模模糊糊地听说过Comonad,但我真正知道的是它提供了extract::wa->a,有点类似于Monad的return::a->ma 在“真实”代码中注明“真实”使用Comonad的额外积分。这些链接可能会有所帮助: 。特别是,“当你看到大量小型但类似的计算拼凑成的大型数据结构时,很有可能我们正在处理一个comonad” 这并不能完全回

Haskell中的Comonad类型类是什么?正如在Comonad from中一样(也欢迎对提供Comonad typeclass的任何其他包进行解释)。我模模糊糊地听说过Comonad,但我真正知道的是它提供了
extract::wa->a
,有点类似于Monad的
return::a->ma


在“真实”代码中注明“真实”使用Comonad的额外积分。

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

  • 。特别是,“当你看到大量小型但类似的计算拼凑成的大型数据结构时,很有可能我们正在处理一个comonad”

  • 这并不能完全回答我的问题,但我想把一些相关信息放在回答格式中:

    “co”(松散地)表示“翻转箭头”。这是一个粗略的图像

    以一元操作为例:

    return :: a ~> m a
    flip (>>=) :: (a ~> m b) -> (m a ~> m b)
    
    extract :: a <~ w a
    extend :: (a <~ w b) -> (w a <~ w b)
    
    反转弯曲的箭头,您将获得comonadic操作:

    return :: a ~> m a
    flip (>>=) :: (a ~> m b) -> (m a ~> m b)
    
    extract :: a <~ w a
    extend :: (a <~ w b) -> (w a <~ w b)
    

    请注意,在这种格式中,
    return
    是一个恰好适合
    flip(>>=)
    的参数槽的箭头,
    extract
    extend
    也是如此。Monad/comonad定律指出,当您将
    return
    extract
    放入该插槽时,结果是标识箭头。法律是一样的,“只是箭头在转动”。这是一个超级手工回答,但希望它能提供一些见解。

    +1第一个链接是我真正将其结合在一起的链接。仅链接的答案至少应该包含链接内容的摘要。目前这个答案不适合作为一个好的答案,所以。考虑一下扩展它,这样它就可以在没有链接文章的情况下独立运行。“每当你看到大量的数据结构从许多小而相似的计算中拼凑出来时,我们就有机会和一个共同的人打交道”。那么这是否意味着片段着色器是共有的呢?我发现扩展的很有帮助。我真的很想看看“共有”和正常之间的区别。我知道什么是单子。因此,如果我知道“co”是什么意思,我可以总结自己,什么是科摩纳德,并深刻理解它。亚历克赛·罗曼诺夫的回答在这方面没有任何作用。@Evi1M4chine:“co”(松散地)的意思是“翻转箭头”。这是一个粗略的图像。考虑单行运算:<代码>返回::A~> M A<代码>,代码>翻页绑定::(A~> M B)->(M A~> M B)< /代码>。反转这些弯曲的箭头,你就可以得到comonadic操作:
    extract::ab)->wa->wb
    )谢谢你@Dan Burton…所以当你使用monad时,你可以处理“内部”(将新的和修改过的东西塞进),使用comonads,你可以处理“外部”(最终取出东西或只是为了修改它们)。这种观点正确吗?因为它确实有助于深入理解。comonads可以用来模拟协同效应。这里有一个很好的关于协同效应的介绍:你的答案与避免单子教程的谬误非常吻合。monad(和comonad)只是一个接口。尽管知道他们的意图确实很好。比如:他们背后的想法。