sintaxis - or en haskell
¿Qué es la clase de tipo Comonad en Haskell? (2)
Esto no responde completamente mi pregunta, pero quería poner alguna información relevante en formato de respuesta:
"co" (sin apretar) significa "voltear las flechas". Aquí hay una visión aproximada de eso.
Considera las operaciones monádicas:
return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)
Invierta las flechas onduladas y obtendrá las operaciones comonádicas:
extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)
(Escrito con flechas normales)
extract :: w a -> a
extend :: (w a -> b) -> w a -> w b
Observe cómo en este formato, return
es una flecha que simplemente encaja en el argumento slot para flip (>>=)
, y lo mismo es cierto para extract
y extend
. Las leyes de Monad / comonad dicen que cuando pones return
o extract
en esa ranura, el resultado es la flecha de identidad. Las leyes son las mismas, "solo con las flechas volteadas". Esa es una respuesta estupenda, pero espero que brinde alguna información.
¿Qué es la clase de tipo Comonad en Haskell? Al igual que en Comonad desde Control.Comonad en el paquete comonad (también son bienvenidas las explicaciones de cualquier otro paquete que proporcione una clase de tipo Comonad). He escuchado vagamente sobre Comonad, pero lo único que sé realmente es que proporciona extract :: wa -> a
, extract :: wa -> a
especie de paralelo al return :: a -> ma
de Monad return :: a -> ma
.
Puntos de bonificación por anotar los usos de la "vida real" de Comonad en código "real".
Estos enlaces pueden ser útiles:
- La evaluación de los autómatas celulares es comonádica . En particular, "cada vez que veas grandes estructuras de datos ensambladas a partir de muchos cómputos pequeños pero similares, hay una gran posibilidad de que estemos ante una comonad".
- Secuencias, flujos y segmentos
- Comadronas en la vida cotidiana