в моем примере save-db принимает рекветст, делает io с базой и отдает ответ, который потом make-response каким-то образом трансформирует в нужный формат.
Получается что save-db имеет четкую логику, которая описана в виде: докстрингов, pre-post условий, тестами, спекой, комменты. Логика входа и выхода IO функи такова:
request -> save-db -> ответ из базы.
Если по логике вещей мы работаем с CRUD пользователей, то например request может содержать мапу с параметрами нового пользователя, save-db знает как положить в БД insert'ом и получит от базы ответ (полжили или не положили). Ответы от базы тоже типизированы и они всегда вернуться в виде мапы. соответственно save-db может проанализировать ответ от базы и вернуть уже свой ответ в нужной бизнес-логике.