web-dev-qa-db-fra.com

Quelle est la classe de caractères Comonad dans Haskell?

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".

103
Dan Burton

Ces liens peuvent être utiles:

  1. L'évaluation des automates cellulaires est comonadique . En particulier, "chaque fois que vous voyez de grandes infrastructures de données assemblées à partir de nombreux calculs petits mais similaires, il y a de fortes chances que nous ayons affaire à une comonade".
  2. séquences, flux et segments
  3. Comonades dans la vie quotidienne
78
Alexey Romanov

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.

21
Dan Burton