Quelle est la classe de types Comonad dans Haskell? Comme dans Comonad de Control.Comonad dans le paquet comonad (les explications de tout autre paquet qui fournit une classe de type 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 avec Monad return :: a -> m a
.
Points bonus pour avoir noté les utilisations «réelles» de Comonad dans du code «réel».
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Inverser les flèches squiggly et vous obtenez les opérations 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
)Réponses:
Ces liens peuvent être utiles:
la source
extend
être utile.Cela ne répond pas entièrement à ma question, mais je voulais mettre quelques informations pertinentes sous forme de réponse:
"co" (vaguement) signifie "retourner les flèches". En voici un aperçu approximatif.
Considérez les opérations monadiques:
Inversez les flèches ondulées et vous obtenez les opérations comonadiques:
(Écrit avec des flèches normales)
Remarquez comment, dans ce format, se
return
trouve une flèche qui se trouve juste dans l'emplacement d'argument pourflip (>>=)
, et la même chose est vraie pourextract
etextend
. Les lois de la monade / comonade disent que lorsque vous mettezreturn
ouextract
dans cette fente, le résultat est la flèche d'identité. Les lois sont les mêmes, "juste avec les flèches retournées". C'est une réponse super maniable, mais j'espère qu'elle fournit un aperçu.la source