В функциональных языках хорошо проработаны средства для проектирования среднего слоя. Для работы с нижним слоем сайд эффектов есть IO с толикой императивности. Сверху же есть функциональная композиция и монад-биндинг.
В ООП-языках все наоборот - хорошо проработаны средства для нижнего слоя сайд эффектов. А вот ярко выраженных средств для написания и композиции "чистого" кода нет. То что их нет, не означает то что их нельзя придумать, но тем не менее всем похер, гораздо веселее либо хейтить ООП, либо разводить ботву по типу "всякому подходу свое место".