Z jednej strony +1 dla monad, z drugiej strony w cats musiałem wcale nie tak rzadko używać with-context
żeby ogarnął w kontekście jakiej monady ma robić obliczenia co było trochę annoying.
Ciekawe w sumie z jakiego powodu nikt jeszcze w Clojure nie wpadł na coś analogicznego do free monad (tj. pisania logiki jako interpretowalnej struktury danych z dostępnych operacji). I mean, to nie brzmi na trudno do zrobienia biorąc pod uwagę homoikoniczność, ale wydaje mi się że nie widziałem żeby ktoś napisał blogposta/cokolwiek w tym guście.
To jest o tyle ciekawe, że wywraca twój program niejako na drugą stronę - twoja logika biznesowa to tylko opis pożądanych operacji, a ich semantyka jest nadawana przez zewnętrzny względem nich interpreter I można wtedy w nim zawrzeć wszystkie cross-cutting concerns (jak np. obsługę błędów).
O ile dobrze rozumiem koncept tj.