¿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
)Respuestas:
Estos enlaces pueden resultar útiles:
fuente
extend
útil.Esto no responde completamente a mi pregunta, pero quería poner información relevante en formato de respuesta:
"co" (vagamente) significa "voltear las flechas". Aquí hay una imagen aproximada de eso.
Considere las operaciones monádicas:
Invierta las flechas onduladas y obtendrá las operaciones comonádicas:
(Escrito con flechas normales)
Observe cómo en este formato,
return
es una flecha que casualmente encaja en el espacio del argumento paraflip (>>=)
, y lo mismo ocurre conextract
yextend
. Las leyes de mónada / comónada dicen que cuando ponesreturn
oextract
en ese espacio, el resultado es la flecha de identidad. Las leyes son las mismas, "solo con las flechas al aire". Esa es una respuesta súper manual, pero espero que brinde alguna información.fuente