首页 文章

Haskell中的Comonad类型类是什么?

提问于
浏览
102

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

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

2 回答

  • 20

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

  • 77

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

    “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 (>>=) 的参数槽的箭头, extractextend 也是如此 . Monad / comonad法律规定,当你将 returnextract 放入该插槽时,结果就是标识箭头 . 法律是相同的,"just with the arrows flipped" . 这是一个超级手听的答案,但希望它提供了一些见解 .

相关问题