O que é a typeclass Comonad em Haskell? Como em Comonad de Control.Comonad no pacote comonad (explicações de quaisquer outros pacotes que fornecem uma typeclass Comonad também são bem-vindas). Ouvi vagamente sobre o Comonad, mas tudo o que realmente sei sobre ele é que ele fornece extract :: w a -> a
, uma espécie de paralelo com o do Monad return :: a -> m a
.
Pontos de bônus por observar os usos do Comonad na "vida real" no código "real".
return :: a ~> m a
, flip bind :: (a ~> m b) -> (m a ~> m b)
. Reverter os squiggly setas e você começa as operações 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
)