Еще одно откровение: Желание иметь чистые функции без сайд-эффектов привело к появлению в императивном подходе TDD (Test-Driven Development). По сути он принуждает вас почти насильно писать "чистые функции" и изолировать сайд-эффекты, например, работу с БД, с внешним сервером, в отдельные классы (моки, фэйки), чтобы их можно было легко подменить во время тестирования. Вывод: TDD в императивных языках появилось тоже не от хорошей жизни. В ФП-языках оно не нужно, потому что там итак все функции чистые.