Was ist die Comonad-Typklasse in Haskell? Wie in Comonad von Control.Comonad im Comonad-Paket (Erläuterungen zu anderen Paketen, die eine Comonad-Typklasse bereitstellen, sind ebenfalls willkommen). Ich habe vage von Comonad gehört, aber alles, was ich wirklich darüber weiß, ist, dass es eine extract :: w a -> a
Art Parallele zu Monad bietet return :: a -> m a
.
Bonuspunkte für das Notieren der Verwendung von Comonad im "echten" Code im "echten" Code.
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Kehren Sie die schnörkellosen Pfeile um und Sie erhalten die komonadischen Operationen :extract :: a <~ w a
,extend :: (a <~ w b) -> (w a <~ w b)
(extract :: w a -> a
,extend :: (w a -> b) -> w a -> w b
)Antworten:
Diese Links können hilfreich sein:
quelle
extend
hilfreich sein.Dies beantwortet meine Frage nicht vollständig, aber ich wollte einige relevante Informationen in das Antwortformat bringen:
"co" bedeutet (locker) "die Pfeile umdrehen". Hier ist ein grobes Bild davon.
Betrachten Sie die monadischen Operationen:
Kehren Sie die wellenförmigen Pfeile um und Sie erhalten die comonadischen Operationen:
(Geschrieben mit normalen Pfeilen)
Beachten Sie, dass in diesem Format
return
ein Pfeil in den Argumentschlitz für passtflip (>>=)
, und dasselbe gilt fürextract
undextend
. Monaden- / Comonadengesetze besagen, dass das Ergebnis der Identitätspfeil ist , wenn Sie diesen Slot einsetzenreturn
oderextract
in diesen stecken . Die Gesetze sind die gleichen, "nur mit umgedrehten Pfeilen". Das ist eine super handwavey Antwort, aber hoffentlich gibt es einen Einblick.quelle