Ну принцип "чистой функции" я понял)
Т.е. априори чистыми могут на 100% только базовые функции языка🙈😂
Ну почему? Например, функция, котороая берет исходный код и компилирует его в машинный. Наверное, мы хотим, чтобы эта функция была чистой, и для одинаковых данных генерировала всегда одинаковый код, а не зависела от фазы Луны. Более того, такое поведение вполне может рассматриваться как баг, и мы иногда хотим, чтобы компилятор защитил нас от таких багов.
На самом деле в реальной программе есть узкое место, где программа общается с реальным миром, а большинство действий внутри программы вполне можно считать чистыми. Например, чтение файла это не чистая функция (имя файла может быть одним и тем же, а его содержимое может меняться). Компиляция это чистая функция. Сохранение в файл снова сайд-эффект. Опять же, сайд-эффекты вполне можно обернуть в монады и контроллировать них.