Как учить haskell?
Учебник Душкина только не бери. Вот, лучше это почитай:
Это прекрасно, доков по этой тематике много я видел. Но вот из множества доков надо выбрать конечную последовательность для забота. Вот я и прошу тех, кто может оценить запощенный мною юмор, сказать в каком порядке стоит читать. Сам я пока начал читать лёгкое введение в хаскел с оффсайта
Учебник Душкина только не бери.
[15:24:44] Wi says: а чем Душкина книжка плоха?
[15:24:55] lomeo says: наверна потому что много математики, но вроде по его книге учат в некоторых вузах
[15:25:21] Wi says: а вы там вроде вторую вместе писали
как процесс?
[15:25:39] lomeo says: всё пишем бля
[15:25:43] lomeo says: я торможу )
[15:25:51] lomeo says: сейчас по дб пишу
[15:25:57] Wi says: она лучше будет?
[15:26:08] lomeo says: ну математики там почти не будет.
[15:26:13] lomeo says: только краткое введение в лямбду
[15:26:23] lomeo says: монады я постарался описать очень просто
Книга плоха сумбурностью изложения прежде всего.
Математика? Ну-ну, чего-то я там её не заметил
там есть аццкое определение индукции для любых линейно-упорядоченных множеств
SICP, которое одновременно и сделает тебя более хорошим программером, и привьёт стойкое отвращение к лиспу (не, это прикольно, конечно, когда чуваки придумывают офигенные штуки, позволяющие использовать это убожество красиво, типа голь на выдумки хитра, но их выдумки лучше всё-таки использовать в нормальных языках).
А потом задай себе вопрос, нужно ли тебе понимать юмор хаскеляторов? Обрати особое внимание на последний кусок текста ("But seriously, folks, ..." вот мы все верим Дийкстре, что BASIC causes brain damage, я видел достаточно много творений хаскеляторов, чтобы быть практически уверенным, что хаскель тоже разрушает мозг, хоть и немного по-другому. Днесь 2.6 питон вышел, и там они! pep-3141, вот серьёзно, это же пиздец-пиздец-пиздец, а пункт "Rejected Alternatives", особенно строчка "We had expected this to be useful to people using vectors and matrices, but the NumPy community really wasn't interested", ну, она какбэ говорит нам, что у тех чуваков ебанутость, укоренившаяся в участках мозга, ответственных за программирование, пустила метастазы и теперь они ебануты полностью. Это даже не смешно.
(кстати надеюсь, что Гвидо, видимо решивший, что "проще дать, чем объяснить, почему не хочешь", осознает порочность этого пути и пресечёт дальнейшие попытки скатить питон в сраное говно на корню)
Искренне и от всего сердца рекомендую прочитать А потом задай себе вопрос, нужно ли тебе понимать юмор хаскеляторов? Обрати особое внимание на последний кусок текста ("But seriously, folks, ..." вот мы все верим Дийкстре, что BASIC causes brain damage, я видел достаточно много творений хаскеляторов, чтобы быть практически уверенным, что хаскель тоже разрушает мозг, хоть и немного по-другому. Днесь 2.6 питон вышел, и там они! pep-3141, вот серьёзно, это же пиздец-пиздец-пиздец, а пункт "Rejected Alternatives", особенно строчка "We had expected this to be useful to people using vectors and matrices, but the NumPy community really wasn't interested", ну, она какбэ говорит нам, что у тех чуваков ебанутость, укоренившаяся в участках мозга, ответственных за программирование, пустила метастазы и теперь они ебануты полностью. Это даже не смешно.
(кстати надеюсь, что Гвидо, видимо решивший, что "проще дать, чем объяснить, почему не хочешь", осознает порочность этого пути и пресечёт дальнейшие попытки скатить питон в сраное говно на корню)
А потом задай себе вопрос, нужно ли тебе понимать юмор хаскеляторов? Обрати особое внимание на последний кусок текста ("But seriously, folks, ...")Я обратил внимание на тот факт, что они рекомендовали эту подборку в роли учебного пособия. Или ты имеешь в виду что незачем в принципе хаскел досконально изучать?
Днесь 2.6 питон вышел, и там они! pep-3141, вот серьёзно, это же пиздец-пиздец-пиздец, а пункт "Rejected Alternatives", особенно строчка "We had expected this to be useful to people using vectors and matrices, but the NumPy community really wasn't interested", ну, она какбэ говорит нам, что у тех чуваков ебанутость, укоренившаяся в участках мозга, ответственных за программирование, пустила метастазы и теперь они ебануты полностью. Это даже не смешно.Мне пока трагичность ситуации не заметна, зато посмеялся я от души. Они серьёзно?
имхо, лучше так, чем как у цепепешников: есть какбе гибкий и быстрый язык, но у язычка этого нет ничего похожего на нормальную стандартную библиотеку.
но у язычка этого нет ничего похожего на нормальную стандартную библиотекуКстати, кроме boost и Loki есть другие либы общего назначения для цэпэпэ?
использовать это убожество красиво,Рискую скатиться в холивар, но почему убожество?
---
Я не знаю, я ещё не пробовал =)
Меня действительно как-то пугает концентрация не по хорошему сумасшедших людей в коммьюнити. Это наверное неспроста, так что изучать нужно осторожно, стараясь не увлечься. Желательно при этом иметь в активе какой-нибудь нормальный язык, вроде C# третьей версии (LINQ это, на самом деле, monad comprehension, и классические монады на нём весьма няшно реализуются чтобы не впечатлиться слишком сильно, и чтобы не считать, что зубодробительность концепций (точнее, их объяснения) и использование хаскеля являются необходимым злом, с которым можно мириться.
Кстати, кроме boost и Loki есть другие либы общего назначения для цэпэпэ?буст блять, и локи. Почему эти долбоёбы не запихнули туда простенький парсер URL-ов?
какой-нибудь нормальный язык4.2
таких нет. Цешарп-таки уровнем ниже хаскеля.
Ну и скобки достают немножко. Совершенно любой пример из начала SICP, где ещё нет макросов, при переписывании на питоне оказывается в миллион раз чище. Макросы круты, конечно, но писать-то их приходится на том же лиспе...
Ну и макросы сосут по сравнению с, например, фортовыми IMMEDIATE. Не то, чтобы это действительно сильно напрягало, но ощущение убогости усиливает.
Ну и стандартная библиотека, да. Протокол работы с хэштейблами меня поразил до глубины души, так нельзя! Собственно, если посмотреть на описание Paul Graham's "Arc", то видно, насколько просто некоторые фейлы можно исправить, типа вот этого. Впрочем, он тоже далеко не все исправляет, ИМХО.
буст блять, и локи. Почему эти долбоёбы не запихнули туда простенький парсер URL-ов?Зачем библиотеке языка общего назначения такая специфическая штука? Имхо, слишком большое разбухание стандартной библиотеки - не самая лучшая практика.
буст блять, и локи. Почему эти долбоёбы не запихнули туда простенький парсер URL-ов?(ни в коем случае не в защиту буста) зачем в стандартной библиотеке парсер урлов?
типа: вам шашечки или ехать? ты их только парсить чтоли собираешься?
Едут python и java, которые имею не только парсер url-ов, но и большое количество ещё более специализированных вещей. А в цепепе шашечки всякие, вроде "метапрограммирования" на шаблонах.
потихоньку разбираюсь с языком. Возник вопрос об эффективности. Ну что коэффициенты меньше императивных языков - это понятно, хаскелл намного сложнее. Меня беспокоит вопрос асимптотики и возможности её сохранения. Что опытные люди могут сказать об времени, потребной на сортировку списка? Можно использовать дополнительные структуры данных, например деревья.
Большая часть алгоритмов придумывалось в терминах "взять элемент и перезаписать им n-ную ячейку массива"
Реализовывать такие тяжело и довольно бессмысленно. Если у тя алгоритм не такой - то обычно сохраняется.
Асимптотика по памяти - хз, ее тяжелее контролировать.
Сложно или невозможно вовсе? Просто много алгоритмов предполагают заранее, что мы можем отсортировать массив за nlog(n).
Например, с помощью ByteString или еще того хуже Foreign.Ptr + FFI
Я обычно забивал на это и юзал sort из Prelude. Если дюже надо - потом свой пишешь и меняешь импорт.
P.S Дюже надо = тормоза в сорте
ну показания памяти - явный чит. Они в яву запихивали явамашину. Немудрено, что разницу в 20 раз получали.
Мне казалось, у тамошней сортировки вполне нормальная асимптотика..
Кто мне подскажет, если два раза вызывается функция для одного и того же аргумента, она будет считаться два раза? Или лучше завести отдельную константу для записи результата функции, чтобы сэкономить время?
если два раза вызывается функция для одного и того же аргумента, она будет считаться два раза?Ну если она без побочных эффектов и компилятор об этом знает и вообще заморачивается такими вещами, то не будет. Как там в Хаскеле с этим — не знаю. Видел только, что если, например f(a) = a + a, то несмотря на то, что выражения вычисляются лениво, но "a" будет посчитано только 1 раз. Но у тебя другой случай, как я понимаю — g(a, a).
Но у тебя другой случай, как я понимаю — g(a, a).правильно понял. Это, конечно, пока не принципиально. Я сначала хочу написать работающую в принципе программу, а потом уже доведу её до ума. Ранняя оптимизация - пустая трата времени.
Или лучше завести отдельную константу для записи результата функции, чтобы сэкономить время?ой
мы про хаскель говорим или я что пропустил?
какие нах константы в хаскеле?
какие нах константы в хаскеле?я думаю он говорит про ещё одну функцию, которую объявит в where. По идее, она может подсказать компилятору, что вычислять во второй раз это не нужно.
какие нах константы в хаскеле?
const :: a -> b -> a
const a _ = a
Ну если она без побочных эффектов и компилятор об этом знает и вообще заморачивается такими вещами, то не будет. Как там в Хаскеле с этим — не знаю.В хаскеле все, что не прелюдная монада, без побочных эффектов.
Сразу возник вопрос. Какие ещё особенности оформления кода влияют на компиляцию программы, кроме идентов? Где об этом можно подробно прочитать? Нубогиды, которые я сейчас читаю на этом не акцентируются.
И ещё: можно ghc задать параметром ширину табов? Если нет, можно ли научить эклипс перед компиляцией автоматически генерировать временный файл, заменив там табы на пробелы, и скармливать его компилятору?
код пишу в соответствующем плагине эклипса.бросай нахрен. Лучше haskell-mode для emacs'а не найдёшь.
можно ли научить эклипс перед компиляцией автоматически генерировать временный файл, заменив там табы на пробелы, и скармливать его компилятору?что за бред?
не проще ли отключить в эклипсе табы?
нах они ваще там по умолчанию включены не понимаю...
хотя я в эклипсе дофига всег оне понимаю...
Кстати, недавно видел отличную книжку "Haskell - the Craft of Functional Programming". Очень понятно написано, сначала даже кажется, что слишком подробно разжевывают. Еще там в правильном порядке темы расположены. Обычно по традиции начинают с HelloWorld и сразу показывают do нотацию, тип IO и монады, которые являются хитрым хаком, а в этой книжке они в конце идут. В общем, советую.
Оставить комментарий
yroslavasako
Раньше имел очень поверхностное знакомство с функциональными языками. Посмотрел тут некоторые идиомы разработки на хаскелл. Внешне это всё кажется неподъемным, в каком порядке и что нужно читать/писать, чтобы понять указанный выше юмор?