Qu’est ce que la classe Comonad en Haskell?

Qu’est ce que la classe Comonad en Haskell? Comme dans Comonad à partir de Control.Comonad dans le package comonad (les explications de tous les autres paquets fournissant une classe Comonad sont également les bienvenues). J’ai vaguement entendu parler de Comonad, mais tout ce que je sais vraiment, c’est que cela fournit des extract :: wa -> a , extract :: wa -> a sorte de parallèle avec le return :: a -> ma de Monad return :: a -> ma .

Des points bonus pour noter les utilisations “réelles” de la Comonad en code “réel”.

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 de nombreux calculs de petite taille mais similaires, il y a de fortes chances que nous ayons affaire à une comonad”.
  2. Séquences, stream et segments
  3. Comonads au quotidien

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

“co” (vaguement) signifie “retourner les flèches”. Voici un aperçu approximatif de cela.

Considérons les opérations monadiques:

 return :: a ~> ma flip (>>=) :: (a ~> mb) -> (ma ~> mb) 

Inverser les flèches ondulées et vous obtenez les opérations communes:

 extract :: a <~ wa extend :: (a <~ wb) -> (wa <~ wb) 

(Écrit avec des flèches normales)

 extract :: wa -> a extend :: (wa -> b) -> wa -> wb 

Notez que dans ce format, return est une flèche qui se trouve juste dans le slot d'argument pour flip (>>=) , et il en va de même pour extract et extend . Les lois Monad / Comonad stipulent que lorsque vous placez un return ou un extract dans cet emplacement, vous obtenez la flèche d'identité. Les lois sont les mêmes, "juste avec les flèches retournées". C'est une réponse superbe, mais j'espère que cela vous donnera un aperçu.