¿Qué es la clase de tipo Comonad en Haskell? Como en Comonad de Control.Comonad en el paquete comonad (también se agradecen las explicaciones de cualquier otro paquete que proporcione una clase de tipo Comonad). He oído hablar vagamente de Comonad, pero todo lo que realmente sé es que proporciona extract :: w a -> a
, una especie de paralelo con el de Monad return :: a -> m a
.
Puntos de bonificación por señalar los usos "reales" de Comonad en código "real".
return :: a ~> m a
, flip bind :: (a ~> m b) -> (m a ~> m b)
. Revertir las flechas onduladas y se obtiene las operaciones 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
)