W Clojure? No idea, nie próbowałem jeszcze czegoś takiego zaimplementować.
Ale bardzo ciekawie wygląda toto ze Scali - http://frees.io/
Od jakiegoś czasu mamy na Śląsku spotkania programistów funkcyjnych (aż nie wierzę) i jutro właśnie ktoś ma o tym prezentację, więc chętnie posłucham.
Ale pierwszy guess z brzegu to zrobienie makra które symbole operacji danej algebry podmienia na coś, co zresolvuje tą operację w danym kontekście (dynamic binding z mapą symbol -> interpretacja?). Albo po prostu pisanie cytowanymi listami (tylko to na pewno mniej wygodne jak się manualnie robi). Albo tagowanie operacji tagged literals?
Chociaż każda opcja brzmi na swój sposób trochę ułomnie
O, albo pisanie kodu a'la hiccup, keyword reprezentuje operację, kontekst dostarcza ich interpretacji. Tylko w sumie to też głupi pomysł, bo by wymagało reimplementacji rzeczy typu conditionale czy pętle, which is dumb.
Tak w kwestii nieimplementacyjnej to bardzo mi się podobał ten artykuł - https://deque.blog/2017/07/06/hexagonal-architecture-a-less-declarative-free-monad/
Piszą w nim o analogii między sześciokątem o free monads
mmm
cos podobnego mi sie kolatalo po glowie swego czasu
ale jak zaczalem w tym grzebac to dotarlo do mnie ze w sumie to pisze jezyk programowania z interpreterem
i to nie ma zadnego sensu
kiedy ma sie dobry jezyk programowania in the first place
chyba trampoliny mi wystarcza
a wlasnie probowalem zrobic taki “funkcyjny hexagon”
Znaczy, to trochę ma sens chyba, bo jednak np. taki program we free monadzie możesz łatwo przenosić mię∂zy interpreterami (to trochę jak DI - inny do testów, inny do bazy SQLowej, inny do bazy w pliku czy coś) i je komponować i ograniczasz też możliwość popełnienia błędu, ograniczając możliwe operacje, ale może rzeczywiście nie jest to taki duży sens w dynamicznym języku jak i tak nie możesz typecheckować poprawności programu. Nie wiem. It sounds enticing, ale nie jestem pewien czy by się to sensownie wpasowało w Klożer.