Чистота (щодо мови програмування) — відсутність побічних ефектів. Мова програмування є чистим у тому випадку, якщо всі функції в програмах цієї мови є чистими.
Програми, написані на чистих мовах програмування, простіше налагоджувати, верифікувати, в них простіше виявляти помилки, які не вдалося виявити за допомогою тестування. Програми на чистому мовою програмування простіше переписувати, уникаючи внесення помилок. У той же час, сам процес планування програми з розрахунком на чистоту складніше.
Ще однією важливою перевагою чистих функціональних мов є паралелізм. Оскільки всі функції для обчислень використовують тільки свої параметри, можна організувати обчислення незалежних функцій у довільному порядку або паралельно, на результат обчислень це не вплине. Паралелізм може бути організований не тільки на рівні компілятора мови, але і на рівні архітектури технічних засобів. Існують експериментальні комп'ютери, засновані на подібних архітектур, наприклад Lisp-машина.
Найбільш серйозною сферою застосування мов програмування, в якій постійно присутні побічні ефекти у функціях, є введення-виведення. Можна вважати, що будь-яка операція вводу даних від користувача є дією з побічним ефектом, тому що не можна заздалегідь сказати, що саме користувач введе в якості значень параметрів, що використовуються в обчислювальному процесі. Хоча деякі дослідники і вчені-теоретики стверджують, що введення-висновок не можна розглядати в якості прикладу наявності побічних ефектів, тому що по суті введення-виведення — це зміна оточення програми, але в будь-якому випадку введення-виведення робить використовують його функції недетерминированными.
У чистому функціональному програмуванні оператор присвоювання відсутня, об'єкти можна редагувати і знищувати, можна тільки створювати нові шляхом декомпозиції і синтезу існуючих. Про непотрібних об'єктах подбає вбудований в будь-транслятор функціонального мови збирач сміття. Завдяки цьому в чистих функціональних мовах всі функції вільні від побічних ефектів. Однак це не заважає цим мовам імітувати деякі корисні імперативні властивості, такі, як обробка виключень і змінні (деструктивно) масиви. Для цього існують спеціальні методи.
Однак деякі причини наявності функцій з побічними ефектами повністю прибрати з функціональних мов програмування не можна, оскільки в такому випадку такі мови були б занадто обмежені в практичному застосуванні. У першу чергу це відноситься саме до введення-висновку. Складно уявити собі повноцінний мову програмування, де немає можливості здійснювати введення даних від користувача в інтерактивному режимі, а також здійснювати вивід даних для користувача.
Для забезпечення можливості використання таких технологій, як введення-виведення, без применшення властивості чистоти, у багатьох функціональних мовами програмування, в тому числі і в мові Haskell, використовується спеціальний механізм, названий «монадою». Монади як би обгортають необхідні імперативні властивості, не допускаючи їх змішування з чистим функціонального синтаксису мови. Використання монад дозволило реалізувати всі ті вузькі місця, які регламентували наявність побічних ефектів у функціях.
Так, наприклад, для забезпечення введення-виведення в мові Haskell реалізована стандартна монада IO, поза якою неможливо виконати жодної операції вводу-виводу. Такими ж властивостями володіють і всі інші стандартні монади, реалізовані для мови Haskell.