Но в целом это можно, какой механизм использовать внутри, уже отдельных вопрос, но в целом Capabiltiy, mtl (нормальный), Effects, HFM (пусть тоже будет вещью) именно об этом
Приствие операций из какого-то домена (вон выше RO/RW) совсем просто, что-то вроде того, к каким файлам обращаться - сложнее и могут потребоваться сложные структуры
Самый простой подход у нас, кстати использовался в библиотеке для базы, он на тапах понимал тип транзации ro или rw, учитывая, что база умела параллельно пускать только одну rw транзакцию это было важно
я имею ввиду, что если все эффекты бы детально описывались, тогда можно было бы что-то подоказывать
именно! и выше Александр очень прав про метрики и логи, что на условную системную чистоту не влияют, т.е. я хочу различать эффекты. где это есть? фреймворк? хоть кто-то еще про это парится?
именно! и выше Александр очень прав про метрики и логи, что на условную системную чистоту не влияют, т.е. я хочу различать эффекты. где это есть? фреймворк? хоть кто-то еще про это парится?
ну он и направление задал. я думаю, в пределе это делают не средствами haskell, а уже по-другому доказывают
Т.е. как может работать get: 1. сделать запрос в сервис авторизации (недетерминированный эффект) 2. подтянуть данные из базы (недетерминированный эффект) 3. положить данные в локальный кеш (недетерминированный эффект ещё и с записью) 4. выдать метрики и логи (эффект, но можно игнорировать)
При том, что обращения к базе и сервисам (авторизации например) будет использовать локальное состояние для поддержки backpressure (мониторинга ошибок и восстановления, треккинга важности запроса)