LINUX.ORG.RU

Вышла книжка по функциональному программированию на Haskell

 ,


3

5

Григорий Макеев выложил в свободный доступ книгу «Основы функционального программирования на языке Haskell».
Скачать можно тут.

>>> Подробности

★★★★

Проверено: anonymous_incognito ()
Последнее исправление: cab (всего исправлений: 1)

Ответ на: комментарий от vertexua

Scala заметно лучше чем java, но тоже не то что сможет дать «прорыв» в программировании даже бизнес-логики, на которую scala как я думаю и ориентирована.

Чем то выбор - scala vs java - напоминает выбор между либерами (Медведевым) и государственниками (Путиным), или между верой и атеизмом. Каждый путь в чем-то верен, но в целом, обязательно сворачиват не по правильному пути или делает вброс лжи в своих интересах, возможно в целях поиска компромисов. Scala также является лишь компромисом, не больше.

В целом, ни scala ни тем более java не являются правильным путем.

Правильный путь на сегодня - erlang и haskell.

Deleted
()
Ответ на: комментарий от Deleted

В ФП код «по определению» почти в 99% короче чем при любых других. Конечно же если «писатель» знаком с ФП, а не пытается «городить костыли» на ФП, если не использовать ФП, но «писать» код на ФП то конечно можно получить феерического коня.

Познакомьте со своими определениями психотерапевта.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Ещё раз: греби через Индийский Океан, дружок. Я предпочитаю самолёты и корабли.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Меня ты не знаешь, а менеджер из тебя никакой - я и сам с таким не смогу работать :) Костылями я тоже отлично владею, но ходить на них постоянно не буду, нет в этом для меня никакой необходимости, если выбирать правильный инструмент.

Чувак, ты - не Ъ, ты - позер.

Ъ программист пишет сразу делает так:

cat > executable

И дальше вручную пишет бинарник.

IDE - для лохов.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Солнышко, я с Haskell знаком уже лет 8 и с тех пор регулярно на нём пишу. Причем не только пишу, а и продвигаю его в коммерческих структурах.

И еще я иногда шлю патчики в GHC.

В отличии от тебя, что только трындеть горазд.

Что ты вообще сделал полезного за всю свою жизнь, чтобы учить других уму-разуму? Небось работаешь себе за копейки на злого-ненавистного менеджера, который не понимает всей глубины твоих сокрушающих способностей.

rtvd ★★★★★
()
Ответ на: комментарий от vertexua

Все правильно, и непонятно почему после годов существования хаскелля это не очевидно каждому

Потому что

а) кое-кому нужно не полезный продукт создать в сжатые сроки, а «поиграть с интересным языком» или написать статью про то, как при помощи линз и ко-монад написать парсер, что будет ну ооочень красивым, непонятным для посвященных и работать за O(n^3). Ой блин... O(n^3) это вроде не круто. Ну ничего, это же functional pearl а не performance pearl. :-)

б) иногда задача очень специфическая. Legacy не мешает а всякие там ADT значительно полезнее приличных records.

в) ну и есть масса маргиналов, что готовы убить за возможность есть битое стекло.

А вообще мне Haskell нравится. По-своему неплохой язык.

rtvd ★★★★★
()
Ответ на: комментарий от vertexua

Я уже писал - мне не чем «хвастаться» области ФП, я лишь изучаю ФП.

Работаю же я в области обычного программирования, язык очень похож на java, но не java. Работаю с одной и той же платформой очень давно.

Знаю что такое «бизнес-логика», «работа в команде», «внедрение системы». Умею работать с любым кодом, в принципе на любом языке.

Зачем Вам мой код? Будет думаю часть его опубликована и на github, и репозитарии тоже будут, но не скоро. Я так быстро не учусь, как Вам могло показаться, чтобы осваивать что-то иное, чем простое «ремесленное программирование», за которое кстати очень хорошо платят, и мне оно в целом по душе, но знаю что это не правильно, что «ремесленное программирование» должно быть иным, чем java-sql-подобным.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от rtvd

Копейками до какой суммы считать?

Если бы Вы «программировали» на Haskell, то не опускали бы ФП в целом, чем Вы в этом треде и заняты, и похоже Вам за это «опускание» лишь и «платят».

Deleted
()
Ответ на: комментарий от vertexua

Да, Scala действительно неплоха. Я слышал у них пока есть проблемы со скоростью из-за неэффективной реализации comprehensions и некоторых других вещей, но это всё решается.

rtvd ★★★★★
()
Ответ на: комментарий от anonymous

В зеркало давно смотрелись? Про себя написали на счет г-на ?

Замечу, я себя не ассоциирую с г-м, а вот Ваши менеры вести «беседы», очень похожи на манеры «господина».

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Если бы Вы «программировали» на Haskell, то не опускали бы ФП в целом, чем Вы в этом треде и заняты, и похоже Вам за это «опускание» лишь и «платят».

У тебя что, очередная теория заговора?

Я ФП не опускаю. Вообще-то я указал на некоторые недостатки реализации GHC. То, что ты так дико возбудился и всё обобщил - красноречиво говорит о твоём IQ. Если человек не в состоянии воспринимать культурную критику (см 1 и 2), то у него проблемы.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Да ты же совсем «поехавший». Или «может» ты баба? Логика на уровне детсадовца для «одарённых» детей.

anonymous
()
Ответ на: комментарий от Deleted

Я уже писал - мне не чем «хвастаться» области ФП, я лишь изучаю ФП.

Что и ожидалось. Нечем хвастаться, ещё изучает, но уже кидается говном в прохожих. Продолжай в том же духе, прийдёшь к успеху.

Работаю же я в области обычного программирования, язык очень похож на java, но не java. Работаю с одной и той же платформой очень давно.

Сказать что за язык стремаешься. C# что-ли? :)

Знаю что такое «бизнес-логика», «работа в команде», «внедрение системы». Умею работать с любым кодом, в принципе на любом языке.

Видимо знаешь, и недавидишь. Ужалил тебя менеджер, вот ты и решил искать альтернативы. Нашёл ФП и оно стало твоей религией. И теперь каждый раз, когда тебя дрючат на работе, ты про себя проговариваешь мантру «зато я изучаю ФП, ФП - рулит, я - Д'Артаньян». Приблизительно так само, как побитый гопами школьник думает что «ну ничего, они вырастут и станут алкашами, а я вырасту и стану поэтом».

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

Начну перечислять заблуждения (хотя я не уверен что могу быть для Вас лично «авторитетом», я на этом и не настаиваю, каждый должен доверять только личной интуиции):

- «cabal dependency hell» - я же в реализации haskell-platform в окружении Gentoo + haskell-updater проблем уже два года не наблюдаю, может то Ваши заслуги? если это так, то «снимаю шляпу».

- «haskell всего лишь годен для учебы» - Вы же сами пишите что у Вас Haskell - работа, это академическая работа или на «производстве» ?

Deleted
()
Ответ на: комментарий от vertexua

Скала хорошая, но не без недостатков, на мой непритязательный взгляд. Пихают они сейчас все в стандартную библиотеку и компиляция - медленная, просто ппц.

anonymous
()
Ответ на: комментарий от qnikst

Александр, прошу прощения на вспыльчивость. Я пожалуй слишком резко отреагировал на то, что Вы обвинили меня в намеренной дезинформации. Ни дезинформировать, ни утверждать что Вы - «детка» я не намеревался.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

Сказать что за язык стремаешься. C# что-ли? :)

Слова выбирайте пожалуйста. Не C#, вот этот «чудо язык» (http://ru.wikipedia.org/wiki/X++) , от той же корпорации, потому и не хочу сообщать :)

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

«cabal dependency hell» - я же в реализации haskell-platform в окружении Gentoo + haskell-updater проблем уже два года не наблюдаю

Потому что ничего не пишешь и поэтому ничего не установлено, говно ты тупое. Майкл Снойман из yesod признает cabal hell: http://www.yesodweb.com/blog/2012/11/solving-cabal-hell. Куда ему до тебя, светила ФП.

anonymous
()
Ответ на: комментарий от vertexua

Решив простую систему уравнений, можно показать, что находится по ссылке:

Scala = OOP + FP

FP = стремление к отказу от побочных эффектов

OOP = ненужно + мутабельное скрытое состояние. Чистые функции вовсю заменяются на методы, которые этим состоянием манипулируют. Т.е. весь код состоит из побочных эффектов.

мутабельное состояние + чистые функции = nonsence

FP + OOP = nonsence + ненужно

Scala = ?

dmfd
()
Ответ на: комментарий от rtvd

Ужалил тебя менеджер

Фантазеры на лоре ? Менеджеры душечки, иначе бы уже нашел новое место для «ремесла» и с большим процентов на 20 окладом.

Deleted
()
Ответ на: комментарий от anonymous

Майкл Снойман

Ничего о нем не скажу, а тебя прошу «шкодить» заканчивать, и выйди из тени ан-с!, иначе отправлю в блокированные за г-но.

Deleted
()
Ответ на: комментарий от Deleted

- «cabal dependency hell» - я же в реализации haskell-platform в окружении Gentoo + haskell-updater проблем уже два года не наблюдаю, может то Ваши заслуги? если это так, то «снимаю шляпу».

Я тоже не наблюдаю, когда пишу одну программу.

Когда же я пишут несколько штук, которые зависят от десятка своих библиотек, и которые все скопом зависят от где-то тридцати библиотек из haskel platform плюс ещё нескольких, что в haskell platform не входят - тогда начинаются танцы с бубном.

Может ты только числа Фибоначи на haskell считаешь?

- «haskell всего лишь годен для учебы» - Вы же сами пишите что у Вас Haskell - работа, это академическая работа или на «производстве» ?

У меня Haskell - один из кучи инструментов которые я иногда выбираю для работы. Нет, далеко не академической. И я критикую haskell не потому, что он мне не нравится. Он как раз мне нравится. Просто когда я пишу на нём софт, то напарываюсь на проблемы. Ты эти проблемы тоже увидишь, когда начнёшь писать неигрушечный софт. Впрочем.. Так как ты скатился в проскость практически религиозного фанатизма, возможно ты будешь грызть кактусы до фатального истекания кровью.

rtvd ★★★★★
()
Ответ на: комментарий от anonymous
# eix cabal
[I] dev-haskell/cabal
     Available versions:  1.14.0^t (~)1.16.0.3(0/1.16.0.3)^t {doc profile test}
     Installed versions:  1.16.0.3^t(17:19:16 24.02.2013)(profile -test)
     Homepage:            http://www.haskell.org/cabal/
     Description:         A framework for packaging Haskell software

* dev-haskell/cabal-install
     Available versions:  (~)0.10.2-r2 (~)0.14.0 (~)1.16.0.2 {+noprefs}
     Homepage:            http://www.haskell.org/cabal/
     Description:         The command-line interface for Cabal and Hackage.

Какой системой пользуется «авторитет» Ваш и Вы лично последние 2 года? Смею заверить «проблем» в Gentoo я не наблюдал о которых сообщает Ваш «авторитет».

Deleted
()
Ответ на: комментарий от Deleted

Г-м кидает некий ан-с, я же в никого еще не кидался ничем.

Не знаю, кто такой ан-с. Что до тебя, то ты писал вот это:

Расскажите нам здесь какой замечательный Java, IDEA и прочая «туфта». Посмею предположить что Ваша секта занимается тремя «столпами промышленного программирования», гордо именуемой Вами «работой».
Котик, Пролог забросили от той лишь причине твои «старшекласники», что им «побыстрее» результаты нужны, и часов на разработку приложений надо.
Ведь вся жизнь это сплошная учеба, не так ли ? Не всем, в том числе и Вам это по нраву?
rtvd ★★★★★
()
Ответ на: комментарий от dmfd

FP = стремление к отказу от побочных эффектов

Ну не надо хуйню-то пороть. Ты же вроде адекватный был более-менее. От пересранина что ли заразился?

anonymous
()
Ответ на: комментарий от rtvd

когда начнёшь писать неигрушечный софт.

Если софт пишется фрагментами (кубиками) по 100-1000 строчек, то и «проблемы» «уходят сами», а когда «софт» это феерический sql-java код или код даже на haskell но с подходом а la sql-java, то и проблемы очевидные будут и никуда от них не уйти (многочасовые посиделки - здесь поправил - там вылезли новые баги), код должен быть разделен на фрагменты, фрагменты должны быть компактными и автономными и понятными хотя бы их авторам, а еще лучше любому знакомому с предметом.

Deleted
()
Ответ на: комментарий от Deleted

Фантазеры на лоре ? Менеджеры душечки, иначе бы уже нашел новое место для «ремесла» и с большим процентов на 20 окладом.

А что, за Axapta нынче платят нормально?

Впрочем, логика неясна. Если не нравится навязанный работой инструментарий, то нафига там сидеть? Тем более, если можно зарабатывать больше.

rtvd ★★★★★
()
Ответ на: комментарий от tailgunner

Ты же вроде адекватный был более-менее.

Что? И после всех моих стараний?!.

Жж0ш.

Альтернативное определение хотелось бы услышать.

Моё мнение: ФП подталкивает к такому дизайну, где побочные эффекты строго ограничены и контролируются. И это — самое ценное свойство функциональщины для прикладного пользования, спросите у Кармака.

dmfd
()
Ответ на: комментарий от Deleted

Если софт пишется фрагментами (кубиками) по 100-1000 строчек, то и «проблемы» «уходят сами», а когда «софт» это феерический sql-java код или код даже на haskell но с подходом а la sql-java, то и проблемы очевидные будут и никуда от них не уйти (многочасовые посиделки - здесь поправил - там вылезли новые баги), код должен быть разделен на фрагменты, фрагменты должны быть компактными и автономными и понятными хотя бы их авторам, а еще лучше любому знакомому с предметом.

Когда я говорю «неигрушечный код», то подразумевается оптимально разбитая на компоненты кодовая база суммарным объёмом хотя бы 50K строк, где есть не только executables, но и библиотеки, и который решает насущные а не высосанные из пальца задачи.

И вообще, ты хочешь меня поучить тому, как разбивать программы на компоненты? Не слышал такое выражение «не учи отца детей делать»?

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Прошу прощения, но г-м я там никого не обзываю.

Не обзываешь, а поливаешь. Типа ты такой умный, а все дураки и ты снисходительно так их учишь уму разуму, несчастных.

rtvd ★★★★★
()
Ответ на: комментарий от dmfd

В сочетании с java-like ООП это свойство превращается в тыкву, и от функциональщины остаются только умные слова и немного сахарку.

dmfd
()
Ответ на: комментарий от Deleted

Так за другое не платят от 100кр :(, а одной идеей сыт не будешь.

Странно. Мне кажется, что в Росии ещё лет 5 назад можно было зарабатывать порядка того же. Думал зарплаты выросли.

Да, невысоко ценят в ваших краях программистов. Впрочем, лет 6-7 назад ехал я из Москвы в Питер и общался с одним юристом. И он мне сказал, что он работает с теми, кто собирается в Дубне софтом заниматься. Я спросил, сколько собираются платить, и он сказал что-то типа $700 в месяц. Он был уверен, что за такие деньги там станут работать. Может и прав, но как-то жестоко это.

rtvd ★★★★★
()
Ответ на: комментарий от dmfd

Ты же вроде адекватный был более-менее.

Что? И после всех моих стараний?!.

Эй, это не я назвал тебя адекватным, а анонимус.

Альтернативное определение хотелось бы услышать.

«Жж0ш» означает, что близкая к правде мысль сформулирована троллинг-стайл.

ФП подталкивает к такому дизайну, где побочные эффекты строго ограничены и контролируются

Я назвал бы это «стилем программирования», а не «дизайном»; и побочные эффекты именно _контролируются_. Еще можно сказать «в ФП принято по мере возможности избегать кода с побочными эфектами»,

tailgunner ★★★★★
()
Ответ на: комментарий от rtvd

Я тоже не наблюдаю, когда пишу одну программу.

Я раньше тоже наблюдал, когда писал одну программу, потом начинал другую, а потом вновь брался за первую. Но после того, как осилил генту и cabal-dev, я уже давно про этот ад не вспоминал.

dmfd
()
Ответ на: комментарий от Deleted

В том то и суть. Любой программист который узнает что-то новое проходит через набор фаз, если не отваливается на пол-пути.

  • Недоверие и непонимание
  • Понимание сути и восхищение, видение только белого
  • Неумелые попытки применить и негодование
  • Успех на практике
  • Глубокое понимание и умение - ирония и троллинг, love-hate relationship

Так вот ты на второй, браток. И есть вероятность что когда дойдешь до третей, то поймешь что у хаскелля четвертая и пятая бывают очень редко, в очень ограниченных задачах

vertexua ★★★★★
()
Ответ на: комментарий от rtvd

Не то чтобы неэффективной, просто нехитрой в плане оптимизации. Транслируется в набор map/filter/flatMap/foreach с лямбдами, которые инстансы классов. Когда пишешь for, то понимаешь что перед тобой do-notation, monadic environment. Потому в цикле number crunching вызывать list.foreach { here goes new class instance for lambda } не очень радует. Приходит на помощь while или хвостовая рекурсия, они настоящие. Настоящий джавовский foreach написать нельзя, вот такие пироги.

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 4)
Ответ на: комментарий от dmfd

Scala = OOP + FP

Верно

FP = стремление к отказу от побочных эффектов

Во-первых ФВП и просто удобства. Кроме того ООП в Scala отличный. Но если говорть о стремлении к отказу от побочных эффектов, то именно «стремлении». Но когда в итоге получается монада IO, то нужно остановиться и перестать курить траву. Нужно давать возможность решать задачу наиболее адекватным способом для этого конкретного случая

OOP = ненужно + мутабельное скрытое состояние

Есть иммутабельные классы под настроение. Но можно и делать то что уже лет 50 делают, просто пишут мутабельный код непосредственно. И самолеты летают, поезда ездят.

Scala = ?

Язык, которые более чем готов чтобы внедрить его в реальные проекты, которые должны быть 100% успешными, заюзать всю экосистему Java, вундервафли Scala и применять Java EE/Spring и моноиды в категории эндофункторов в одном проекте по желанию под настроение. Годится?

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)

Видишь, анон, а ты беспокоился что Перестронин сольётся. Сейчас он нам ещё доставит :-)

anonymous
()
Ответ на: комментарий от dmfd

Я раньше тоже наблюдал, когда писал одну программу, потом начинал другую, а потом вновь брался за первую. Но после того, как осилил генту и cabal-dev, я уже давно про этот ад не вспоминал.

Допустим есть куча библиотек, поставленных вместе с OS (пусть даже Gentoo). Часть из них поставленна самостоятельно, часть пришла вместе со своей версией GHC.

Плюс есть еще библиотеки, которые были поставлены из hackage (cabal install --user ... ).

Далее ты пишешь свои библиотеки L1, L2, ... L10 и приложения A1, ... , A5.

Все эти твои библиотеки и приложения могут зависить от твоих библиотек и от сторонних.

Как cabal-dev поможет?

Скажем, L1 зависит от packageA, L2 тоже от него зависит. A1 зависит от L1 и L2. Но при сборке L1 cabal выбрал packageA-1.24 а для L2 выбрал packageA-1.26. В результате A1 зависит от двух версий сразу, даже если packageA не входит в его зависимости. Причем жестко прописывать версии packageA - не вариант. Хоть L1 и L2 соберутся с чем угодно, но они тоже зависят от каких-то сторонних библиотек, что тоже по-разному дружат с различными версиями packageA. Нужна система, что смотрит на все зависимости глобально и выясняет, какие версии подобрать чтобы собиралось вообще всё.

rtvd ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.