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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2 comments

  1. Miroff:

    Система типов там одна из самых продвинутых в мире. В JS этого пласта настолько нет совсем, что разработчики на JS даже не осознают насколько он важен. На практике для программиста польза от продвинутой системы типов выражается в том, что если твоя задача выразима через типы и ты понимаешь как это сделать, ты пишешь программу, запускаешь ее в первый раз и она сразу работает правильно. Если твоя задача невыразима или ты не понимаешь как это сделать, ты долго мучаешься, а потом убиваешь себя об стену.

    https://softwareengineering.stackexchange.com/questions/279316/what-exactly-makes-the-haskell-type-system-so-revered-vs-say-java

    • Типы очень понравились, но речь не о том, что в хаскеле они есть, а в JS нет. В качестве альтернативы можно взять те же плюсы или, прости господи, TypeScript. Речь про отношение к хаскелю как к невероятно сложному языку, в котором все не так, но который поможет взглянуть на мир иначе.

      Согласен, что есть некоторый объем кода, после которого отсутствие строгой типизации усиливает головную боль. Но если вспомнить теоремы Геделя, рискну предположить, что увеличивая размер кода, постепенно головную боль начнет приносить наличие типизации.