Quelle est la classe de caractères Comonad dans Haskell? Comme dans Comonad à partir de Control.Comonad dans le package comonad (les explications de tout autre package fournissant une classe de types Comonad sont également les bienvenues). J'ai vaguement entendu parler de Comonad, mais tout ce que je sais vraiment, c'est qu'il fournit extract :: w a -> a
, Une sorte de parallèle au return :: a -> m a
De Monad.
Points bonus pour noter les utilisations "réelles" de Comonad dans le code "réel".
Ces liens peuvent être utiles:
Cela ne répond pas entièrement à ma question, mais je voulais mettre des informations pertinentes sous forme de réponse:
"co" (vaguement) signifie "renverser les flèches". Voici un aperçu approximatif de cela.
Considérez les opérations monadiques:
return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)
Inversez les flèches ondulées et vous obtenez les opérations comonadiques:
extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)
(Écrit avec des flèches normales)
extract :: w a -> a
extend :: (w a -> b) -> w a -> w b
Remarquez comment dans ce format, return
est une flèche qui se trouve juste pour tenir dans l'argument argument pour flip (>>=)
, et il en va de même pour extract
et extend
. Les lois monade/comonade indiquent que lorsque vous placez return
ou extract
dans cet emplacement, le résultat est la flèche d'identité. Les lois sont les mêmes, "juste avec les flèches renversées". C'est une réponse super ondulée, mais j'espère qu'elle fournira un aperçu.