Pull to refresh

Comments 34

>В куче Хаскеля всё аккуратно завёрнуто по коробочкам. Куча Хаскеля — это куча подарков (thunks). Когда вы хотите узнать, что же внутри подарка, вы открываете (вычисляете) его.
>Подарки в куче довольно своенравны. Некоторые взрываются, когда вы их открываете, другие населены духами, которые открывают другие подарки, когда их тревожат.
Ну и где мне теперь скрыться от этого полного, беспросветного п*здеца?
Что увидено, уже не развидеть
Охохо. Автор явно поделиться тем что он там купит :)
Прошу прощения. «должен поделиться» *
Да… уже заметил. С спросонья натыкал не туда :(
Это наконец та самая статья для IT-ресурса суть которой никому вне IT-сферы понять не дано?)
Я бы даже сказал что суть которой многим в IT-сфере понять не дано.
«Если написать программу, которой сможет пользоваться любой идиот, то только идиоты этой программой и захотят пользоваться»…

К чему такой детский сад? Между высшей алгеброй и объяснением на пальцах срединного пути нет?
Я просто приведу цитату:
«Если вы что-то не можете объяснить 6-летнему ребёнку, вы сами этого не понимаете.»
— Бернард Шоу
даю топикстартеру ещё одну идею, как можно легко и просто рассказывать про хаскель так, чтобы было понятно даже самым глупым и неграмотным. вот, например, смысл «монады» мало кто понимает, даже если и пользовался. хотя на самом деле это довольно просто, ведь монада — это всего-навсего моноид в категории эндофункторов.
А в чём собственно заключается идея?
Все просто. В языке есть «чистые» функции и «монады». Первые выполняют вычисление на основе аргументов без побочных эффектов. То есть, если f(1,2,3) = 15, то при данных аргументах она ВСЕГДА = 15. В ООП языках это не гарантируется, потому что есть глобальные переменные, члены класса и тд, которые могут меняться. Вот, а монады как раз могут возвращать разные значения в зависимости от аргументов. Обычно, в связи с вызовами функций ввода-вывода. Чистые функции обладают одним интересным свойством, а именно, возможностью автоматического распараллеливания программы, потому что аргументы функций могут вычисляться параллельно без побочных эффектов. В эру многоядерных процессоров это особенно актуально.

У функциональных языков есть еще много интересного (взять хотя бы ленивые вычисления). Но, судя по комментариям к этой заметке, что большинству «тру айтишников» на хабре этого не дано понять.
так это чо, получается, что монада — это просто функция, которую надо всё время вычислять, и она заманала генерить непредсказуемое на выходе?
Монада — традиционная «функция» с побочными эффектами, как в c/c++/pascal. Два раза подаешь одинаковые аргументы и не факт, что получишь один результат.
Да ничего подобного. Монада — это класс с интерфейсом из трёх чистых функций, при помощи которых можно абсрагировать концепцию состояния и побочных эффектов.
Думаете, такое объяснение поможет обратить сторонников ООП в новую веру? :) Главное — что оно делает, а не как оно реализовано.
Зачем вообще кого-то кудато обращать? И вот как раз то, что оно делает — это и есть класс с тремя методами (интерфейс), а то, как оно это делает — это и есть реализация.

Но просто монада — это абсолютно точно ни с какой точки зрения не является функцией. Зачем вводить в заблуждение начинающих Haskell-истов? Язык-то и без этого не тривиальный.
Если уж на то пошло, и в ООП языках уже есть и чистые функции, и замыкания и lazy argument evaluation: например, в языке D, и в других тоже вроде есть. Так что больше не надо извращаться с заумными академическими языками, чтобы ими пользоваться.
С академическими языками не обязательно извращаться. Достаточно иногда на них поглядывать, чтобы знать, что появится в промышленных языках через 3-5-10 лет.
И время от времени нужно выбрасывать языки на свалку потому, что в них накапливаются исторические слои мусора.
Картинки клёвые, но шо тут написано…
Вот что случается, когда художники начинают учить программированию.
Вы так говорите, как будто это что-то плохое :)

Просто сама тема довольно нетривиальная, поэтому иллюстрируй ее или нет, сильно понятнее не станет. Тем не менее, хорошо иллюстрированная статья помогает связывать понятия еще и на ассоциативном поле изображений.

А по поводу художника: learnyouahaskell.com выглядит еще более забавно, хотя его рисовал таки сам автор :)
learnyouahaskell.com выглядит круто! :)
Эта серия статей явно не для знакомства с языком. И не для мотивации изучения хаскеля.

Скорее для тех, кому интересно разобраться в тонкостях работы компилятора.

Рисунки хоть и примитивные, но со смыслом:
1 — простое значение
Just y — тип данных Maybe a
тупл — (a,b)
_|_ — значение, вычисление которого приведёт к ошибке
seq x y — функция форсированного вычисления, нужна чтобы выключить «ленивость»
Именно! Чтобы развить интуицию о том, что за чем, сколько памяти и как долго.

У меня ещё ленивые вычисления ассоциируются с фигурно вязаным свитером: тянешь за ниточку, свитер распускается, а ниточка запутанно бегает по петлям.
А по поводу _|_ uncyclopedia говорит:
Calculations which are undefined are denoted by the _|_ symbol, pronounced Bottom, which the documentation explains as the compiler giving you the finger.
Я так понимаю, ждать продолжения? Лично я с интересом почитаю!
Вскорости будет!
Sign up to leave a comment.

Articles

Change theme settings