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
)