103 votes

Qu'est-ce que la classe de type Comonad en Haskell ?

Qu'est-ce que la classe de type Comonad en 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 à son sujet est qu'il fournit extract :: w a -> a qui est en quelque sorte un parallèle à la méthode de Monad return :: a -> m a .

Points bonus pour avoir noté des utilisations "réelles" de Comonad dans du code "réel".

79voto

Alexey Romanov Points 39124

Ces liens peuvent être utiles :

  1. L'évaluation des automates cellulaires est comonadique . En particulier, "chaque fois que vous voyez de grandes structures de données assemblées à partir d'un grand nombre de petits calculs similaires, il y a de fortes chances que nous ayons affaire à une comonade".
  2. Séquences, flux et segments
  3. Les comonades dans la vie quotidienne

24voto

Dan Burton Points 26639

Cela ne répond pas entièrement à ma question, mais je voulais mettre des informations pertinentes sous forme de réponse :

"co" (au sens large) signifie "inverser les flèches". Voici une image approximative de cela.

Considérons les opérations monadiques :

return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)

Inversez les flèches ondulées et vous obtiendrez 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, comme par hasard, s'adapte à l'emplacement de l'argument pour flip (>>=) et il en va de même pour extract et extend . Les lois de la monade/comonade disent que lorsque vous mettez 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 inversées". C'est une réponse super bancale mais j'espère qu'elle donne un aperçu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X