Apa kelas tipe Comonad di Haskell? Seperti dalam Comonad dari Control.Comonad dalam paket comonad (penjelasan tentang paket lain yang menyediakan kelas tipe Comonad juga diterima). Saya samar-samar pernah mendengar tentang Comonad, tetapi yang saya benar-benar tahu tentang itu adalah penyediaan extract :: w a -> a
, semacam paralel dengan Monad return :: a -> m a
.
Poin bonus untuk mencatat penggunaan Comonad dalam "kehidupan nyata" dalam kode "nyata".
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Membalikkan berlekuk-lekuk panah dan Anda mendapatkan operasi 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
)Jawaban:
Tautan ini mungkin berguna:
sumber
extend
untuk membantu.Ini tidak sepenuhnya menjawab pertanyaan saya, tetapi saya ingin memberikan beberapa informasi yang relevan dalam format jawaban:
"co" (secara longgar) berarti "membalikkan panah". Berikut adalah gambaran kasarnya.
Pertimbangkan operasi monadik:
Balikkan panah berlekuk-lekuk dan Anda mendapatkan operasi comonadic:
(Ditulis dengan panah normal)
Perhatikan bagaimana dalam format ini,
return
adalah panah yang kebetulan pas di slot argumen untukflip (>>=)
, dan hal yang sama berlaku untukextract
danextend
. Hukum monad / comonad mengatakan bahwa ketika Anda memasukkanreturn
atauextract
ke dalam slot itu, hasilnya adalah panah identitas. Hukumnya sama, "hanya dengan panah dibalik". Itu jawaban super handwavey tapi semoga bisa memberikan beberapa wawasan.sumber