Функциональное лукавство

Функциональное лукавство

Прочел первую половину учебника по Haskell, уснул, проснулся и дочитал вторую половину. Теперь не могу понять: либо я дурак, либо хаскелисты снобы. Что такого функционального в хаскеле, чего нет в том же JS?

Обособленность модулей кода — это скорее не функциональная особенность, а элемент гигиены. Иммутабельность очень лукавая: у нас нет переменных, но если очень надо, то можно создать новую константу с нужным значением и дальше работать с ней. А еще, вот вам линзы. Функции чистые, но вы же понимаете, в каком мире живем, поэтому вот вам IO. Все всегда функционально. Но когда требуется, можно использовать монаду.

Оператор if тот же самый. Нет оператора for, но его в JS продолжают использовать только архаичные дилетанты, которые со времен изучения плюсов вертели «О» большое на цикле. Радует управление ленивостью, но я слабо могу представить, как это связано с функциональным стилем. Списки, кортежи, лямбда-функции, функции высшего порядка, типы — все как везде. Синтаксис другой, а логика работы прежняя.

Что в этом языке такого необычного, страшного? Я не говорю, что язык плохой, скорее наоборот: синтаксис лаконичный, компилятор строгий. Но хотелось во время знакомства хвататься за голову с криком «Факмаймозг!». Потом открыть свой обычный код, произнести «глянь че!», поработать и закрыть редактор со словами «О, как!». Вместо этого лишь информация о красивом языке, не более. Теория категорий, даже в поверхностном изложении, возбуждает в миллион раз сильнее.

Может быть тайны языка открываются с определенной глубины, но пока Хаскель напоминает мою кошку копейку, которая возвращается с дождливой улицы, запрыгивает на кровать, а потом смотрит на тебя с говорящим взглядом: «Я чиста, непорочна и все, что ты видишь не имеет ко мне никакого отношения».