Qual è la classe di caratteri Comonad in Haskell? Come in Comonad da Control.Comonad nel pacchetto comonad (sono benvenute anche spiegazioni di qualsiasi altro pacchetto che fornisce una classe di caratteri Comonad). Ho vagamente sentito parlare di Comonad, ma tutto quello che so veramente è che fornisce extract :: w a -> a
, una sorta di parallelo a Monad return :: a -> m a
.
Punti bonus per aver notato usi "reali" di Comonad nel codice "reale".
return :: a ~> m a
, flip bind :: (a ~> m b) -> (m a ~> m b)
. Invertire i ondulate frecce e si ottiene le operazioni 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
)