Funkcje można komponować, podobnie monady (monad transformers), czy dla co-monad istnieją co-monad transformer/monad co-transformers?
Heh, zastanawiam się jak to napisać żeby nie wyszło że jestem nie miły :P
No to może tak, jak wpisałem w googla "comonad" transformers
to dostałem link Comonad-transformers i informację że zmerdzowano z comonad w wersji 4 :D
Pewnie chodzi o moduły
Control.Comonad.Trans
Control.Comonad.Trans.Class
Control.Comonad.Trans.Env
Control.Comonad.Trans.Identity
Control.Comonad.Trans.Store
Control.Comonad.Trans.Traced
BTW kiedyś próbowałem zrozumieć co to ta comonada ale średnio mi poszło. Chyba przy loggerze który jest comonadą co-log
BTW2 uuu, strona Bartosza Milewskiego upadła https://bartoszmilewski.com/2017/01/02/comonads/ :(
@KamilAdam: Pytanie zrodziło się na szybko (bez próby googlowania :P bez szerokiego rozeznania tematu). Wygląda, że można. Jednak na tejże stonie haskellowej jest info, że Deprecated in favor of comonad
. Zastanawiam się czy to wynika z faktu, że jest to ślepa uliczka ewolucji, czy po prostu ciężko znaleźć jakieś przykłady "z życia" (obstawiam, że prędzej "z rzyci" ;) ) na komponowanie co-monad.?Może się tego po prostu nie robi/nie powinno?
Do zrozumienia tematu, u mnie daleka droga, póki co na baaardzo ogólnym poziomie próbuję sobie poukładać pewne koncepty (bez wchodzenia w szczegóły jak to dokładnie działa).
Przestarzale bo moduly przeniesli do biblioteki comonad, ale one dalej sa w bibliotheca comonad I to sa te co je wypisalem powyzej.
Co do przykladu uzycia to podalem logger co-log, ale mnie on przerosl I ostatecznie logowalem w hobbystycznym projekcie do Writer'a
Trochę offtop. O comonadach jest raczej niewiele, ale jeśli chodzi o jako takie zrozumienie monad to pomogła mi książka
https://leanpub.com/book-of-monads
Opierniczałem wszystkie ćwiczenia(polecam w haskellu, bo w scali często jest to mało zabawne).
Po pierwszym czytaniu, drugim i trzecim czytaniu materiałów różnorakich, próbuję uporządkować myśli i zbudować jakiś praktyczny przykład. Zaczynając od comonady, a później chcę przejść do komponowania tych comonad.
- Comonada jest abstrakcją pozwalająca na obliczenia powiązane ze stanem
(czyli tworząc instancję takiej comonady, dajemy jej na starcie jakiś stanwykreślam, bo raczej to bzdura, że dajemy stan na starcie) i dalej... - Comonada dostarcza 2 operacje:
extract
iduplicate
, z którymi pracujemy na poziomie kodu
I teraz jeśli chodz i o przykład praktyczny:
- czy jeśli weźmiemy szereg czasowy (np. temperatura powietrza od początku świata do dnia dzisiejszego, w rozdzielczości 1 dzień) - to jest nasz stan dla comonady?
- zrobimy abstrakcję
okno ruchome
o szerokości N (czyli zwraca nam N temperatur z tego szeregu czasowego), w taki sposób, że:
a)extract
zwraca "bieżący widok" na N wartości
b)duplicate
zwraca nam zaktualizowaną abstrakcję, w taki sposób, żeextract
zwraca okno przesunięte o 1 dzień
to czy powyższe okno ruchome
jest comonadą?