Wątek przeniesiony 2023-08-24 09:54 z Nietuzinkowe tematy przez Riddle.

Kompozycje w programowaniu funkcyjnym

0

Funkcje można komponować, podobnie monady (monad transformers), czy dla co-monad istnieją co-monad transformer/monad co-transformers?

1

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/ :(

0

@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).

0

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

4

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).

0

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.

  1. Comonada jest abstrakcją pozwalająca na obliczenia powiązane ze stanem (czyli tworząc instancję takiej comonady, dajemy jej na starcie jakiś stan wykreślam, bo raczej to bzdura, że dajemy stan na starcie) i dalej...
  2. Comonada dostarcza 2 operacje:extract i duplicate, 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, że extract zwraca okno przesunięte o 1 dzień

to czy powyższe okno ruchome jest comonadą?

1 użytkowników online, w tym zalogowanych: 0, gości: 1