Haskell中的Comonad类型类是什么?与在Control.Comonad in the comonad package中的Comonad一样(也欢迎提供Comonad类型类的任何其他包的解释) . 我模糊地听说过Comonad,但我真正知道的是它提供了 extract :: w a -> a
,与Monad的 return :: a -> m a
平行 .
在“真实”代码中注意Comonad的“现实生活”用途的奖励积分 .
Haskell中的Comonad类型类是什么?与在Control.Comonad in the comonad package中的Comonad一样(也欢迎提供Comonad类型类的任何其他包的解释) . 我模糊地听说过Comonad,但我真正知道的是它提供了 extract :: w a -> a
,与Monad的 return :: a -> m a
平行 .
在“真实”代码中注意Comonad的“现实生活”用途的奖励积分 .
2 回答
这些链接可能会有所帮助:
Evaluating cellular automata is comonadic . 特别是"whenever you see large datastructures pieced together from lots of small but similar computations there's a good chance that we're dealing with a comonad" .
Sequences, streams, and segments
Comonads in everyday life
这并不完全回答我的问题,但我想以答案格式提供一些相关信息:
“co”(松散地)意味着“翻转箭头” . 这是一个粗略的视觉效果 .
考虑monadic操作:
扭转波浪形的箭头,你得到了comonadic操作:
(用普通箭头写)
请注意,在这种格式中,
return
是一个恰好适合flip (>>=)
的参数槽的箭头,extract
和extend
也是如此 . Monad / comonad法律规定,当你将return
或extract
放入该插槽时,结果就是标识箭头 . 法律是相同的,"just with the arrows flipped" . 这是一个超级手听的答案,但希望它提供了一些见解 .