Функциональное программирование "избегает состояния и изменяемых данных".
Замыкания скрывают состояние, связывая свое лексическое окружение, и таким образом замыкаются на своих свободных переменных.
Как Haskell является чисто функциональным, если он поддерживает замыкания? Разве они не нарушают ссылочную прозрачность?