Haskell中的Comonad类型类是什么?
Haskell中的Comonad类型类是什么? 正如Comonad包中的Control.Comonad中的Comonad一样(也提供对提供Comonad类型类的任何其他包的解释)。 我隐约听说过Comonad,但我真正知道的是,它提供了extract :: wa -> a
,类似于Monad的return :: a -> ma
。
在“真实”代码中注明Comonad的“真实生活”用途的加分。
这些链接可能会有所帮助:
这并没有完全回答我的问题,但我想以回答的格式提供一些相关信息:
“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 (>>=)
参数槽的箭头, extract
和extend
也是如此。 Monad / Comonad法则规定,当您将return
或extract
放入该插槽时,结果就是身份箭头。 法律是相同的,“只是箭头翻转”。 这是一个超级handwavey的答案,但希望它提供了一些见解。