Привет.
Я делаю библиотеку эффектов.
Почему это интересно:
1. pure core, functional shell
т.е. разделение логики принятия решений от делетей реализации.
2. без привычной dependency injection, ООП и вот этого всего
3. тесты - списки эффектов и их результатов
4. один код логики для clojure и clojure script. make frontend backend again
5. код выглядит синхронным, но может стать асинхронным без переписывания,
(а)синхронность - деталь реализации
6. можно сериализовывать вычисления и прадолжать на другой машине/платформе
7. дебаг и обращение выполнения вспять
8. простая композиция монад, вроде maybe, either, state
9. к сожалению появляются "цветные функции",
т.е. нельзя передать функцию с эффектами в map, reduce и т.п.
10. под капотом - cloroutine, которая перекомпилирует код в SSA, как core.async
Вот работающие примеры:
https://github.com/darkleaf/effect/blob/master/test/darkleaf/effect/core_test.cljcУ меня есть вопросы, которые я пока не понимаю как решить.
Вероятно они решатся, когда я буду кому-то их объяснять.
Вопросы связаны с композицией и сериализацией.
Если это интересно кому-то и есть время меня выслушать,
напишите, пожалуйста, в личку.