Jaka jest typeklasa Comonad w Haskell? Tak jak w Comonad z Control.Comonad w pakiecie comonad (mile widziane są również wyjaśnienia wszystkich innych pakietów, które zapewniają typeklasę Comonad). Niewyraźnie słyszałem o Comonad, ale tak naprawdę wiem tylko o tym, że jest to extract :: w a -> a
coś w rodzaju paraleli do Monady return :: a -> m a
.
Dodatkowe punkty za odnotowanie użycia Comonad w „prawdziwym” kodzie.
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Odwrócić falowane strzały i dostajesz comonadic operacje:extract :: a <~ w a
,extend :: (a <~ w b) -> (w a <~ w b)
(extract :: w a -> a
,extend :: (w a -> b) -> w a -> w b
)Odpowiedzi:
Te linki mogą być pomocne:
źródło
extend
być pomocne.To nie w pełni odpowiada na moje pytanie, ale chciałem umieścić kilka istotnych informacji w formacie odpowiedzi:
„co” (luźno) oznacza „odwróć strzałki”. Oto przybliżony obraz tego.
Rozważmy operacje monadyczne:
Odwróć faliste strzałki, a otrzymasz operacje komonadyczne:
(Napisane zwykłymi strzałkami)
Zwróć uwagę, że w tym formacie
return
jest strzałka, która tak się składa, że mieści się w polu argumentu forflip (>>=)
, i to samo dotyczyextract
iextend
. Prawa monad / comonad mówią, że kiedy włożyszreturn
lub wejdzieszextract
do tego slotu, wynikiem jest strzałka tożsamości. Prawa są takie same, „tylko z odwróconymi strzałkami”. To bardzo dobra odpowiedź, ale miejmy nadzieję, że zapewnia pewien wgląd.źródło