. Хаскель c Денисом Шевченко, автором книги «О Haskell по человечески»
Хаскель c Денисом Шевченко, автором книги «О Haskell по человечески»

Хаскель c Денисом Шевченко, автором книги «О Haskell по человечески»

dshevchenko [11:36 PM] Вначале пара слов о себе, если кто не в курсе.

Обыкновенный программист-самоучка. В профессии с 2006 года. Основным языком был С++. В 2011 году я впервые услышал о Haskell, ужаснулся и поспешил о нём забыть. В 2012 году случайно услышал о нём вновь, и на этот раз решил разобраться. В 2013 году Haskell крепко меня зацепил, а в 2014 я понял, что влюбился по уши, а потому написал первую версию небольшой книги "О Haskell по-человечески" и инициировал создание сообщества ruHaskell. В 2015 году я окончательно расстался с С++ и решил, что теперь хочу не просто писать о Haskell, слушать о Haskell или разговаривать о Haskell, но работать с ним каждый день. С ноября 2015 я работаю в Сингапурской компании Zalora, в DevOps-команде, и теперь моими каждодневными инструментами являются Haskell и NixOS.

На всякий случай, во избежание ложных ожиданий - я не Haskell-эксперт.

И ещё. Многие знают меня как, можно сказать, Haskell-евангелиста. Так вот, я не собираюсь петь восторженные дифирамбы языку Haskell. Это действительно великолепный язык, но он не является серебряной пулей. 11

sumyuga [11:37 PM] слушал твою историю в SDCast(edited) 2

aelaa [11:37 PM] нужен кто-то, кто мог бы @ channel клич кинуть что начали

ivanlemeshev [11:37 PM] мне интерсно где можно использовать хаскель в продакшене и на каких задачах?

maksimpw [11:38 PM] Где можно посмотреть ссылку на вебинар?

ivanlemeshev [11:38 PM] вот вебинар 2

sanykey [11:38 PM] А какие типовые задачи Haskell решает лучше чем C++? Почему так увлекло, что даже то C++ отказались?

dshevchenko [11:38 PM] Ок, давайте про Хаскел в целом, с самого начала.

[11:38] Чисто-функциональный язык программирования общего назначения. Кроссплатформенный. Компилируемый (хотя есть и интерпретатор). Типизация - статическая, строгая. Умолчальная стратегия вычислений - ленивая.

kirill.mokevnin [11:39 PM] я только из бассейна вынырнул), ребят сначала денис расскажет, потом вопросы ;) 2

mks [11:39 PM] видео или голоса не будет ?

endurance [11:39 PM] нет, максимум трансляция в перескоп от Кирилла с его новойяхты 2 1

sumyuga [11:39 PM] @ivanlemeshev: на хаскеле можно если не всё, то почти всё. даже для системщиков есть реализация на базе хаскель, идрис вроде

dshevchenko [11:40 PM] Для каких задача подходит Хаскел? В принципе, для любых, это универсальный язык.

[11:40] Я знаю ряд компаний, которые используют его для широкого, очень широкого круга задач

[11:40] от веба до электроники

[11:40] мы в Залоре - для веба

[11:41] И да, об истории языка пару слов.

[11:41] Первая версия Haskell вышла в 1990 году, однако до 2000-х этот язык оставался уделом лабораторий и исследовательских групп. Первый стандарт языка был принят в 1998, а второй уже в 2010.

Де-факто стандартный Haskell-компилятор - это ghc.

[11:41] Язык Haskell глубоко впитал в себя дух математики (ведь и назван он в честь Хаскела Карри, американского математика, основоположника комбинаторной логики). В частности, Haskell - это (уже единственный в мире) чисто-функциональный язык.

[11:41] В этом его отличие от всех (известных мне) языков.

[11:42] И именно непохожесть Хаскела делает порог вхождения в него весьма высоким. Я хотел бы сказать обратно, но к сожалению, не могу. Язык весьма сложен.

[11:42] стоит оговориться

[11:43] многие аспекты этого языка очень просты в использовании

[11:43] Но есть и хардкорные вещи

[11:43] глубоко понять которые нельзя ни за неделю, ни за месяц

diskrouk [11:43 PM] Монады? 3

dshevchenko [11:43 PM] А что, уже о монадах?

aelaa [11:43 PM] пф, монады простые)

dshevchenko [11:43 PM] Верно. В Хаскеле есть вещи куда хардкорнее монад.

densom [11:44 PM] Лямбда исчисление?

alcheorg [11:44 PM] Какая IDE у вас любимая для хаскеля?

dshevchenko [11:44 PM] Стоп, давайте про лямбда.

[11:45] Да, действительно, лямбда-исчисление (далее ЛИ) легло в основу Хаскела в том смысле, что он чисто-функциональный язык. Однако вам необязательно изучать ЛИ перед началом программирования на Хаскеле.

astynax [11:45 PM] Лямбда-исчисление простое!

dshevchenko [11:45 PM] как вы знаете, Л-функции есть сейчас во многих языках, но в Хаскеле Л-функции выглядят наиболее математично и потому естественно.

[11:46] Про IDE чуть позже.

aelaa [11:46 PM] однако многие вещи будут намного понятнее после краткого курса лямбд

dshevchenko [11:46 PM] Соглашусь, краткий курс не помешает совсем.

[11:47] Так, друзья, сегодня вечером прозвучал вопрос о монадах и меня попросили на него ответить. Поэтому давайте отвечу.

Вокруг монад идёт чуть ли не религиозно-сакральный спор. Так вот я не сторонник подобной мистификации монад. В частности, многие ищут некое единственно-истинное определение понятия "монада". Строго говоря, вот это определение:

Но это определение из математики (а именно из теории категорий), и к языку Haskell оно не имеет ни малейшего отношения. Да, люди, создавшие язык Haskell, сознательно взяли это понятие из теории категорий, но обыкновенным программистам-практикам от этого ни холодно, ни жарко. Многие из Haskell-корифеев прямо говорят, что знание теории категорий не сделает из вас лучшего Haskell-разработчика, так же как знание древне-латинских корней ряда английских слов не сделает вас лучшим English-speaker. 4

[11:48] Поэтому не нужно думать о неких глубоких аналогиях.

[11:48] Нужно просто брать конкретные монадические типы и использовать их

[11:48] Пример привести?

alcheorg [11:48 PM] да

aelaa [11:48 PM] конечно

sashashakun [11:48 PM] Примеры да

johnconor [11:49 PM] монада - это конечный автомат хаскеля?

sanykey [11:50 PM] Мне до сих пор тяжело понять суть разговора.

dshevchenko [11:51 PM] почему?

sanykey [11:51 PM] Я не могу понять что за монады 5

dpwiz [11:51 PM] забейте вы на монады 4 1

sashashakun [11:51 PM] Давайте послушаем @dshevchenko , а потом будем задавать вопросы. 11 2

kirill.mokevnin [11:51 PM] денис не ориентируйся на тех кто в теме 10

[11:51] тут молчит 2000 человек

dshevchenko [11:52 PM] Действительно, @dpwiz прав, париться о монадах шибко не нужно. Но раз уж такой вопрос неизменно возникает вокруг Хаскела, его нужно осветить.

johnconor [11:52 PM] тут онлайн 157 человек

sumyuga [11:52 PM] даёшь хаскель для блондинок 3

endurance [11:52 PM] 156 live

eye [11:53 PM] оффлайны тоже смогут прочитать, от 0 до 2к+ человек

dshevchenko [11:54 PM] Есть такой класс типов, Maybe . Он отражает понятие "опциональное значение". То есть такое значение, которое может быть иницализировано чем-то конкретным, или же (условно) Пустотой.

Вот как выглядит определение этого класса типов:

Для конкретики возьмём тип Maybe Int . Это - опциональное целочисленное значение, то есть мы можем создать его так:

Кто знаком с С++ - это что-то типа boost::optional.

Так вот, к чему это я веду, и при чём тут монады, спросите вы?

astynax [11:55 PM] Денис, вот тут ты всех окончательно потеряешь :simple_smile: 5 2 2 2 2 2 1 2 1 2 1 2 1 3 3 1 2 2 2 3 2 1

dshevchenko [11:55 PM] Ок, давайте по порядку. Класс типов - это, скажем так, логическая группа типов, объединённых некими общими чертами.

[11:56] Так вот класс типов Maybe - это группа всех таких типов, для которых может иметь смысл понятие "опциональное значение".

[11:56] Maybe Int, Maybe Double, Maybe String.

astynax [11:57 PM] Ой, Maybe - не класс типов же!

[11:57] Это параметрически параметризованный тип (один, но полиморфный)(edited)

vernat [11:57 PM] ребята, давайте проявим уважение к Денису и не будем перебивать до тех пор, пока он не попросит задавать ему вопросы(edited) 14

shoxel [11:57 PM] Зачем нужно опциональное значение? 5 1

izubkov [11:58 PM] joined #general

dshevchenko [11:59 PM] да, я дал неточное определение. Прошу прощения, друзья, я немного волнуюсь, и потому тороплюсь и могу сбиваться. 2 2

[11:59] Сейчас всё поясню.

----- Today February 6th, 2016 ----- alex.pletnev [12:02 AM] joined #general

ekaroibshka [12:02 AM] fflush(stdout);

dshevchenko [12:03 AM] Например, мы хотим вернуть из функции что-то, чего "может не быть". Например, функция должна вернуть строку из файла, который может отсутствовать. Сообщить об отсутствии файла можно, конечно, с помощью исключения, но можно просто вернуть значение типа Maybe Text . И тогда вызывающая сторона смотрит:

вот принцип опционального значения.

ivanfox [12:04 AM] скиньте линк на вебинар, плиз 10 3 1 1

johnconor [12:05 AM] он вотон прям сейчас и прямо тут

ivanlemeshev [12:05 AM] @ivanfox: текстовый вебинар

kalisto [12:05 AM] так классно что непривычно текстовый а то уже привыкли к шаблону видео и звук.

ivanfox [12:06 AM] лол, извинияюсь ) 5 1 2

dshevchenko [12:06 AM] Тип Maybe относится к классу типов Monad . Монады в Хаскеле, с практической стороны, это просто класс типов Monad , то есть "логическая группа" всех типов, к значениям которых можно применить некие функции. Я специально не буду говорить об этом подробно, иначе это займёт кучу времени.

Идея в том, что для того, чтобы использовать значение типа Maybe Text , вам НЕ нужно знать о монадической природе данного типа! Вообще! Забудьте об этом. Думайте об этом типе просто как об опциональном значении, а не как о монадическом типе. 4

[12:07] Вообще, особенно париться о монадах не нужно. Мы берём конкретные типы и используем их согласно их предназначению.

ant76 [12:08 AM] joined #general

dshevchenko [12:09 AM] Maybe - опционалка. Either - другая "опционалка", но для ловли исключений. IO - для работы с внешним миром. Список [] - для работы с набором значений одного типа. Все эти типы - монадические, то есть относятся к классу Monad. Но во многих случаях (не всегда, но во многих) вы даже не обязаны об этом знать! 6

[12:09] особенно в начале

[12:09] Поэтому не ищите сакральности в монадах

[12:09] там её нет 2

[12:09] Вопросы о монадах?

dpwiz [12:10 AM] Nothing 1

dshevchenko [12:10 AM] :simple_smile:

[12:10] тогда далее

shoxel [12:10 AM] Нас ими пугали.

dshevchenko [12:10 AM] о практике

[12:10] о бизнесе желаете? чтобы разбавить техническую сторону

[12:10] о вакансиях

alcheorg [12:10 AM] о вакансиях - да

[12:10] В HH пусто

dshevchenko [12:11 AM] К сожалению, на сегодняшний день количество Haskell-вакансий в России очень невелико, буквально единицы. Причина проста - страх. Большинство руководителей софтверного бизнеса всё ещё считают Haskell "научно-экспериментальной игрушкой", непригодной для реального продакшена. Реальность же состоит в том, что Haskell давно готов к, так сказать, боевому применению. Язык и его экосистема уверенно развиваются последние 6-7 лет, и поэтому Haskell в 2016 году и Haskell, скажем, в 2003 году (не говоря уже раньше) - это небо и земля. Проблем в том, что знают об этом лишь те, кто в теме.

Поэтому если вы хотите найти Haskell-работу - смотрите за рубеж. Если у вас нет проблем с разговорным английским - шансы найти подходящую вакансию весьма велики. Да, этих вакансий далеко не тысячи, но и соискателей не так много, в сравнении с mainstream-языками.

sergeytoylyev [12:11 AM] продакшн

diskrouk [12:11 AM] в каких случаях заказчик хочет продукт на хаскеле?

dshevchenko [12:11 AM] В редких. :simple_smile:

Facebook Code Fighting spam with Haskell We recently completed a two-year redesign of Sigma, one of our spam-fighting systems. Check out how we integrated Haskell with our existing C++ code and the improvements we made to GHC.

dpwiz [12:12 AM] заказчик хочет продукт, который работает, а не который на ХХХХ.

dshevchenko [12:12 AM] Да, давайте об историях успешного внедрения.

diskrouk [12:12 AM] ну тогда php

dshevchenko [12:12 AM] пока вопросы придержите, пожалуйста

[12:13] Число компаний, использующих Haskell в своей каждодневной работе, неуклонно растёт, но это число всё равно очень мало, особенно в общемировом масштабе. По прикидке руководителя одной из таких компаний, число профессиональных Haskell-разработчиков (то есть работающих с Haskell) в мире менее 2 тысяч. Понятно, что это капля в море. Впрочем, справедливости ради стоит отметить, что всего 5-6 лет назд это число было куда меньше. Так что прогресс налицо.

Ряд компаний успешно внедрили Хаскел в продакшн, о чём периодически сообщают. И это не только FB. Вот один из списков

GitHub commercialhaskell/commercialhaskell commercialhaskell - A special interest group for companies and individuals interested in commercial usage of Haskell

[12:14] Да, негусто, скажете вы, но раньше их было куда меньше.

[12:14] среди этих компаний - и монстры, и маленькие

[12:14] @dpwiz: прав, часто заказчику глубоко плевать на язык реализации.

[12:15] Важно то, что Хаскел работает как в критичных условиях

[12:15] банковский сектор, например

[12:15] так и в более простых

[12:15] игрушки 1 1

[12:15] или магазины

[12:15] ну вы поняли

[12:16] Вопросы об этом?

densom [12:16 AM] Непонятно, зачем он вообще нужен

dshevchenko [12:16 AM] :simple_smile:

densom [12:16 AM] просто Computer Science тренировка?

dshevchenko [12:16 AM] То есть вопрос о преимущества Хаскела?

shoxel [12:16 AM] Он быстрее?

someone [12:16 AM] бытует мнение, что от эрланга можно бы и отказаться в пользу cloud haskell 2

sergeytoylyev [12:16 AM] lf

shoxel [12:17 AM] Надежнее?

dshevchenko [12:17 AM] Давайте отвечу на этот вопрос.

[12:17] пока пауза

[12:18] Я не сторонник языковых холиваров, поэтому сознательно не стану сравнивать Хаскел с другими языками в контексте "лучше-хуже". В конце концов, многие сидят на других языках и счастливы. Однако о преимуществах сказать стоит.

kalisto [12:20 AM] А изучение языка, практика на нем и т.п.? Только в англоязычном варианте?(edited)

dshevchenko [12:20 AM] Он компилируемый, а значит быстрый. Чтобы было понятно, насколько быстрый - примерно в три раза медленнее чем С++ (мой грубый тест четырёхлетней давности). Но это БЕЗ распараллеливания, конечно же. А вот если распараллелить - можем получить серьёзный прирост скорости. Причём с паралелизмом Хаскел дружит очень крепко!

ekaroibshka [12:21 AM] через что, должен пройти изучающий хаскел, чтобы быть готовым писать реальные вещи? Всмысле какая минимальная цепочка книг, личных тренировочных проектов, чего то еще, которая обычно приводит или привела лично вас в состояние в котором хаскел не дракон какой-нибудь, а полезный приятный инструмент.

dshevchenko [12:21 AM] секунду

[12:22] Он статически и строго типизированный, а значит большое число ошибок будет гарантированно отловлено на стадии компиляции. Что убирает необходимость обмазывать всё и вся тестами. 1

[12:22] Причём система типов в Хаскеле одна из лучших среди языков (но не самая лучшая)

[12:23] Он высокоуровневый, в смысле кода. Что означает возможность написания краткого и очень читабельного кода.

[12:23] ну, про автоматическую сборку мусора молчу, это и так понятно

kirill.mokevnin [12:24 AM] я позволю себе добавит, что назначение системы типов как раз в том чтобы все ошибки находились на этапе компиляции, поэтому очевидно что чем лучше система типов тем меньше багов и ошибок в рантайме, а они бывают совсем разные.(edited) 1

dshevchenko [12:24 AM] Верно. Есть даже поговорка "Если программа на Хаскеле компилируется - значит она правильная"

[12:24] имеется в виду не то, что правильная по работе

[12:24] может и с ошибками быть, конечно

[12:25] имеется в виду, что правильная в смысле типов

kalisto [12:25 AM] А что такое GHC?

dshevchenko [12:25 AM] то есть если комплияция прошла

[12:25] это значит, что все типы согласованы

[12:26] нигде нет ситуации, скажем, когда функция должна вернуть число с плавающей точкой, а принимающая сторона вдруг ждёт целочисленное значение, что приводит к срезке точности.

[12:26] такое в Хаскеле невозможно в принципе

[12:26] то есть имеем надёжный код

alexelizarov [12:26 AM] Слышал, что мощная система типов может отловить даже такую ошибку как выход за пределы массива, например. Скажите пожалуйста, в хаскеле есть такое?

alcheorg [12:26 AM] Пример с марсианским аппаратом с дюймами и метрами?

johnconor [12:27 AM] да, кто не знает - начинка марсианского аппарата - на хаскеле

dshevchenko [12:27 AM] да, Денис Редозубов в своей лекции приводил пример, когда систему типов можно использовать настолько элегантно, что она позволяет отлавливать ошибки разных СИ, или, например, обращения к третьему элементу кортежа, в котором их всего два.

[12:28] такой код новичок не напишет

[12:28] исползовать сможет

[12:28] но написать - нет

[12:28] это трудновато

[12:28] впрочем, если хорошо объяснить

[12:28] то въехать можно довольно быстро

[12:28] но не за два-три дня, друзья

[12:28] порог вхождения в Хаскел весьма высок

[12:29] я хотел бы сказать обратное, но не могу

[12:29] Дальше идём? 5

sergeytoylyev [12:29 AM] да 2

dshevchenko [12:29 AM] был вопрос про GHC

[12:30] это компилятор Хаскела

[12:30] самый продвинутый

[12:30] дефакто стандарт

[12:30] открытый, конечно же

[12:30] постоянно развивается

[12:30] сообщества в Хаскеле очень активное

shoxel [12:30 AM] Ide?

alexelizarov [12:31 AM] Кирилл в беседах говорил что эрланг часто идет вторым языком в проектах, а на хаскеле пишут проекты целиком?

ivanlemeshev [12:31 AM] в атоме плагин хороший для хаскеля 2

kalisto [12:31 AM] Спасибо Денис! А Cabal что такое?

dshevchenko [12:31 AM] стоп, друзья

[12:31] был вопрос про ИДЕ 3 4

[12:32] важный вопрос, хочу ответить

sumyuga [12:33 AM] а что скажешь за hugs? на курсе от edx именно его рекомендуют

dshevchenko [12:34 AM] Если вы хотите знать, существует ли Хаскельная IDE уровня IntelliJ IDEA - нет друзья, такой нету. Есть плагины для наших любимых Vim, Emacs, Sublime и Atom. Что они умеют? Показать тип выражения, отобразить ошибку в текущем файле, провести несложный рефакторинг или несложное форматирование кода. Да, негусто, особенно для тех, кто привык к IDE уровня all-in-one, но уже чем богаты, как говорится.

Компания FPComplete (один из популяризаторов Хаскела) задумал сделать веб-IDE, но идея провалилась.

alcheorg [12:34 AM] Leksah?

dshevchenko [12:35 AM] Да, скажу за Leksah

[12:35] некрасивый и глючный. К сожалению.

[12:35] да, его пилят

[12:35] но пока это не то я не пользуюсь им

[12:36] Теперь про Cabal, cabal и stack. Это важные инструменты, и о них ходят иногда неверные слухи.

kalisto [12:36 AM] А что такое промышленная группа Хаскел и сетевая?

[12:39] да ходят слухи что там много нерабочих сборок и пакетов. А как учиться если я еще ничего не понимаю да еще и инструмент нерабочий(edited)

dshevchenko [12:41 AM] cabal - это утилита для работы с Хаскел-проектам. Вернее, утилита называется cabal-install , но команда cabal . Она использует библиотеку Cabal , представляющую собой микро-фреймворк для сборки ваших проектов и установки чужих (то есть библиотек, или как у нас говорят, пакетов).

К сожалению, с cabal было много проблем, в частности, dependency hell , когда два пакета зависят от третьего, но разных версий, и после обновления проект перестаёт собираться. Были попытки это исправить, но получилось не очень хорошо.

Тогда компания FPComplete сделала утилиту stack , заменившую собой утилиту cabal-install . stack - это очень классная и мощная штука. Она позволяет

  • установить на компьютере Хаскел-инфраструктуру
  • управлять вашим проектом
  • устанавливать библиотеки 1

[12:41] Теперь stack - это умолчальный способ работы с Хаскелом 1

[12:41] и это мнение разделяет большинство коммерческих пользователей Хаскела 1

[12:42] Про нерабочие пакеты теперь.

[12:42] Существует единый репозиторий Хаскельных пакетов 1

[12:42] Hackage называется

[12:42] в нём сейчас более 8000 пакетов 1

astynax [12:42 AM] @sumyuga: HUGS умер в 98 году. Этим он полезен для обучения на нём - с тех пор не менялся. От современно Хаскеля в лице GHC отстал безнадёжно. Но саме азы учить можно и на HUGS

dshevchenko [12:43 AM] Да, в нём есть и заброшенные пакеты, и бажные, это правда. Однако среди них выделено порядка 1500 пакетов, которые

  • отлажены
  • развиваются
  • испытаны в продакшене 1

[12:43] ну, не то чтобы они идеальны, но очень хороши

densom [12:43 AM] А где вы в web его применяете? 1

dshevchenko [12:43 AM] Ок, про веб

[12:43] тренд сегодня важный

[12:44] так что про веб интересно будет..

[12:44] Хаскел великолепен для веба. Нет, не стану сравнивать его с Рельсами или Джангой (это за пределами данной дискуссии), но скажу одно.

[12:44] Есть фулл-стек-фреймоврки

[12:44] типа Рельс, грубо говоря

[12:44] есть микрофреймворки

[12:44] для велосипедостроения, скажем так

[12:45] есть собственный веб-сервер warp (который. кстати, по ряду тестов рвёт в клочья почти ВСЕ имеющиеся решения!)

dpwiz [12:45 AM] (а где-то рвёт и nginx) 1 2

dshevchenko [12:45 AM] ну да, не будем об этом 1

[12:46] плюс есть специфические вещи

[12:46] начиная от парсинга html и заканчивая json, вебсокетами и т.п.

[12:46] ну то есть весь полноценный веб

sanykey [12:47 AM] т.е. nodejs можно заметить хаскелем?

dshevchenko [12:47 AM] да

[12:47] на сервере

aelaa [12:47 AM] Ты упомянул NixOS

vshatalov [12:47 AM] можно привести веб фреймворк уровня django?

dpwiz [12:47 AM] слез с джанги и это прям глоток чистого воздуха. сервера перестали падать, ресурсы перестали уходить в никуда, отросли волосы и даже брат ожил 7

dshevchenko [12:47 AM] Yesod

[12:47] использую его сам

[12:48] Про NixOS? 1

aelaa [12:48 AM] Да, что это, чем отличается?

dshevchenko [12:48 AM] Это тема не относится к Хаскелу, но пару слов скажу. Это особый дистрибутив Линукса, построенный на базе менеджера пакетов Nix. 1

[12:48] что такое Nix

[12:48] Это менеджер, созданный в духе чисто-функционального программирования

[12:49] такой Хаскель внутрисистемный

aelaa [12:49 AM] иммутабельные пакеты?

dshevchenko [12:49 AM] да, одна из вещей

[12:49] пакет не может быть изменён

[12:49] как значение в Хаскельной программе

aelaa [12:50 AM] Можно сравнить его с CoreOS с Dockerом?

dshevchenko [12:50 AM] отдалённо сравнить можно, но это не то.

vshatalov [12:50 AM] можно установить программу из дебиановских пакетов, или только из исходников?

dshevchenko [12:50 AM] дабы не занимать эфир этой темой

[12:50] вот мои статьи

[12:51] будет продолжение

[12:51] там всё с самой сути начато

ivanlemeshev [12:51 AM] да

dshevchenko [12:51 AM] Какую тему теперь?

[12:52] я знаю, у вас заготовлены вопросы :simple_smile:

aelaa [12:52 AM] о, пару дней назад искал примеры сайтов на Hakyll, как раз этот видел)

dshevchenko [12:52 AM] да :simple_smile:

[12:52] про книги, может? 1

[12:52] про изучение 1

ivanlemeshev [12:53 AM] да

vshatalov [12:53 AM] да, с ссылками )

ivanlemeshev [12:53 AM] сколько месяцев - лет в среднем нужно, чтобы войти в хаскель и начать на нем уверено писать?)(edited) 5

dshevchenko [12:53 AM] ок, пауза 1

kalisto [12:54 AM] А почему бы обучение на Хекслете не выложить - это возможно или нет? Пошагово(edited)

shoxel [12:55 AM] в мире всего 2к спецов, и они работают) нокему курсы пилить

sumyuga [12:55 AM] @kalisto: есть курсы на степике и на edx 1

[12:55] да и книг полно и хороших, понятных в смысле ))

dshevchenko [12:58 AM] Книг по Хаскелу на сегодняшний день весьма много. Правда, большинство из них на английском, но у многих из нас с этим проблем ведь нет? :simple_smile:

Для самых новичков я рекомендую мою книгу: http://ohaskell.dshevchenko.biz/ru/index.html. С самых азов, и до интересных вещей. К сожалению, она далека от совершенства, поэтому - сообщаю по секрету! - я сейчас работаю над версие 2.0, почти полностью обновлённой.

Далее есть вот эта книга: http://www.ozon.ru/context/detail/id/8696277/. Примерно как моя, но чуток подробнее (хотя и воды многовато, на мой взгляд).

Далее идёт знаменитая Real World Haskell: http://book.realworldhaskell.org/. К сожалению, частично устаревшая. С момента её публикации многое усовершенстовалось и изменилось.

А вот из свежатинки: http://haskellbook.com/. Это - книга от азов до высот. К сожалению, толстенная (больше 1000 странц) и дорогая (60 долларов вроде). 1 1

alcheorg [12:58 AM] Когда примерно 2.0 ждать?!

dshevchenko [12:58 AM] к лету

vshatalov [12:58 AM] можно еще ваше мнение - Haskell vs Erlang, Scala, . ?

ivanlemeshev [12:59 AM] выше уже писал что никаких vs не будет

dshevchenko [12:59 AM] К сожалению (или к счастью) я не могу сравнить Хаскел ни с каким языком, кроме С++. Потому что я не знаю ни Эрланг, ни Скалу, ни Кложу. 1

[12:59] Теперь о сроках

[12:59] выше был вопрос

aelaa [12:59 AM] С книгами по Haskell хорошо, а можешь посоветовать что-то по ФП, ЛИ, теории категорий и смежному? 2

dshevchenko [12:59 AM] сколько времени нужно

[12:59] для входа 2

dpwiz [1:01 AM] хаскел - ленивый язык. ты сначала входишь, а потом начинаешь кому-то что-то объяснять. вот тогда-то и начинается изучение. 1

astynax [1:01 AM] Erlang - в другой нише работает и это не язык общего назначения. Scala - недо-пере-Haskell, т.е. потенциально более мощна, на практике много в чём неочевидно сложна

dshevchenko [1:04 AM] По моему опыту скажу так: если пройти вот по тем книгам, которые я упомянул, то с нуля до приемлемого уровня можно дойти за полгода. Под приемлемым уровнем я подразумеваю такой, когда можно начать разбираться в реальном продакшн-коде (нет, в хардкорном едва ли разберётесь, но в обычном - вполне). Но это если эти полгода вникать и вникать!

Проблема порога вхождения в Хаскел заключается в том, что тебе нужно ломать мозги, особенно если ты пришёл из императивного мира. Например, понять отсутствие оператора присваивания. Мне это крышу снесло напрочь! Да и for-конструкций нету. И функции как значения. И инкапсуляции в духе С++ нету. 1

[1:04] и да, все эти ужасные монады и функторы

dpwiz [1:05 AM] да вообще ничего нет. сплошные типы, функции и композиция.

densom [1:05 AM] Зачем стоит изучать Хаскел если не планируешь на нем работать?

dshevchenko [1:05 AM] хороший вопрос.

[1:05] Есть такая идея, что изучение Хаскела сделает вас лучшим программистом на любом языке. 1

[1:05] Я не могу так сказать.

[1:05] То есть может быть и сделает, но может и не сделает.

[1:06] В целом Хаскел полезен хотя бы своей новизной

[1:06] это другой взгляд на мир разработки

[1:06] совсем другой

[1:06] Просто он действительно другой!

[1:06] и потом, увидите красивые решения

[1:07] тот же паттерн матчинг

[1:07] я влюбился в него сразу

[1:07] потрясающе простая идея и потрясяющая полезна 1

densom [1:07 AM] Да, Кирилл рассказывал о нем

dshevchenko [1:07 AM] Далее?

densom [1:07 AM] Ок

vshatalov [1:08 AM]

aelaa [10:59 PM] С книгами по Haskell хорошо, а можешь посоветовать что-то по ФП, ЛИ, теории категорий и смежному?

sanykey [1:08 AM] ооо вспомнил. Я мечтаю податься в Машинное обучение. Хаскел там используется?

dshevchenko [1:08 AM] да

[1:08] Хаскел прекрасно подходит для "интеллектуальных вещей"

denis.kozlov [1:08 AM] Хаскел математически правильнее других языков, это верно?

dshevchenko [1:09 AM] можно сказать да

astynax [1:09 AM] HaskellR (это как R, только Haskell) - используется в маш.обучении 1

yel1owstone [1:09 AM] А может быть такое, что после haskell не захочется писать на других мейнстртмных языках? Можно остаться без работы)

dshevchenko [1:09 AM] О да! 1

[1:09] Мне после Хакела никуда не хочется 1

astynax [1:09 AM] Определённо!

dshevchenko [1:09 AM] это как игла 1

[1:09] она притягивает

dpwiz [1:10 AM] но так со всеми языками. см. "blub paradox"

dshevchenko [1:10 AM] +1

astynax [1:10 AM] не с каждым, всё таки :simple_smile:

yel1owstone [1:10 AM] Тогда его нельзя изучать в начале)

dshevchenko [1:10 AM] Почему?

[1:10] мозги ломать не придётся

sumyuga [1:10 AM] а я вот захотел изучить или хотя бы прикоснуться хаскелю потому что начал читать книгу Романа Душкина “Квантовые вычисления и функциональное программирование”, а там нужен хаскель, хотя бы на базовом уровне

dshevchenko [1:10 AM] стоп

[1:11] про Душкина

astynax [1:11 AM] Haskell в нескольких школах в США дают в средних классах - до всего остального. Отлично заходит, говорят

johnconor [1:11 AM] есть мнение что душкин - отстой

dshevchenko [1:12 AM] В книге Ромы “Квантовые вычисления и функциональное программирование” Хаскел далеко не новичковый. Я бы даже сказал, очень хардкорный. Да, действителько, первый язык программирования, предназначенный для квантовых компьютеров, является надстройкой над Хаскелем.

есть мнение что душкин - отстой

Да, есть мнение что и Денис Шевченко - выскочка-придурок, нихрена не знающий в Хаскеле.

sanykey [1:13 AM] dshevchenko, а вы используете xmonad? Мне его советовали настойчиво, но чтобы его конфигурировать - нужно знать хаскель, это меня и отпугнуло.

dshevchenko [1:13 AM] нет, не использую

ruslan_ua [1:13 AM] все же, какие книги еще посоветуете для изучения ФП

dshevchenko [1:13 AM] Для изучения ФП на каком языке?

astynax [1:13 AM] SICP

diskrouk [1:13 AM] СИКП

dshevchenko [1:13 AM] +1

johnconor [1:14 AM] полная версия что я слышал - Душкин отстой, читайте сразу Шевченко

dshevchenko [1:14 AM] стоп

yel1owstone [1:14 AM] Может сикп на хаскеле делать? Сразу двух зайцев)

dshevchenko [1:14 AM] Да, Рома и сам признаёт, что его книги не для новичков

[1:14] а моя для новичков

[1:14] в этом и разница

[1:14] он пишет хардкорно

[1:14] ну такой уж стиль

[1:14] я пишу разжёвано

[1:15] потому что ориентируюсь на начинающих

[1:15] только на начинающих

kalisto [1:15 AM] 35 / 5 -- 7.0 а почему не 7?

astynax [1:15 AM] SICP можно делать на хаскеле, но нужно делать непременно на лямбдах, и обязательно решать задачи. Впрочем я бы решал сначала на Sceme (Racket), и следом - на Haskell

dstarcev [1:15 AM] В Хаскел сообществе поощряется хардкорный код вообще?

dshevchenko [1:15 AM] отвечаю

[1:15] по этому вопросу нет единого мнения

[1:15] есть люди, которые ОБОЖАЮТ хардкор

[1:15] у них прям всё новое

yel1owstone [1:15 AM] Что такое хардкорный код? 1

kalisto [1:16 AM] Соррррии -- Операция деления всегда возвращает действительное число 1

astynax [1:16 AM] Большинство - за здравый смысл

dshevchenko [1:16 AM] хардкорным я называю такой код, который трудно читать и понимать тем, кто не является шибко продвинутым хаскелистом

dstarcev [1:16 AM] А язык способствует написанию сложночитаемого кода?

astynax [1:16 AM] Однострочники - удел перловиков и лисперов

[1:16] Хаскель в среднем более читаем, чем многие языки

dshevchenko [1:17 AM] Скажем так, на Хаскеле можно написать очень изящный код, и он очень читабельный

[1:17] можно написать и АД 2

vshatalov [1:17 AM] т.е. типа Python PEP8 отсутствует?

dshevchenko [1:17 AM] :simple_smile:

astynax [1:17 AM] Написанию сложночитаемого кода способствует желание написать сложночитаемый код. На любом языке.

dstarcev [1:17 AM] Сколько в Хаскеле способов сделать одну и ту же вещь?

dshevchenko [1:17 AM] как правило, весьма много

astynax [1:17 AM] Два

kalisto [1:17 AM] == это в случае case исполь-ся?

dshevchenko [1:18 AM] я предпочитаю понятный код

astynax [1:18 AM] "Типа PEP8" есть - hlint

dshevchenko [1:18 AM] а не хардкорный

[1:18] И да, в Хаскеле отступы имеют значение, как в Питоне примерно

vshatalov [1:19 AM] я имел ввиду не инструмент для проверки, а именно поддерживаемое сообществом соглашение о стиле кода?

dshevchenko [1:19 AM] единого соглашения нет

dpwiz [1:19 AM] есть несколько style guide, но они форсируются исключительно на местах

astynax [1:19 AM] Есть пара гайдов, но они добровольные. Обычно стиль выбирает команда

dshevchenko [1:20 AM] Далее? 1

johnconor [1:20 AM] да

dshevchenko [1:20 AM] спрашивайте

vshatalov [1:21 AM] ORM для БД есть - типа SQLAlchemy?

anry4e [1:21 AM] joined #general

vshatalov [1:21 AM] и как в haskell с классами и ООП вообще?

dshevchenko [1:22 AM] Во, давайте про ООП

[1:22] Хаскел - это НЕ ООП 1

vernat [1:22 AM] захват, контроль, освобождение ресурсов, как с этим обстоят дела в haskell?

dshevchenko [1:22 AM] даже близко не ООП

dpwiz [1:22 AM] не Java-style бастардизированный ООП

dshevchenko [1:23 AM] В ООП функции и данные смешаны в объектах, являющихся экземплярами классов. В чистом ФП принципиально другой подход: данные одно, а функции - совсем другое. Они никак не смешаны.

[1:24] в чистом ФП с функциями можно работать как со значениями, в то время как в ООП функции - это нечто совершенно иное, нежели значения.

[1:24] там это подпрограмма

[1:24] как в старом добром С

[1:24] а в ФП - это особое значение

[1:24] как в математике

[1:25] поэтому мы можем создать список функций

[1:25] а в ООП так нельзя, максимум список указателей на функции

[1:26] Класс в ФП и в ООП - это не одно и то же

[1:26] Класс в ООП - это тип в ФП

[1:26] а класс в ФП - иной зверь

[1:26] класс - это группа типов, объединенных по неким признакам

dpwiz [1:26 AM] (в идрисе классы типов переименовали в интерфейсы)

dshevchenko [1:27 AM] Очень грубо можно представить себе классы типов как интерфейсы

kalisto [1:27 AM] [0..] !! 5 -- 5 а почему не 4.

yel1owstone [1:27 AM] В чем haskell плох? Для чего ФП подходит хуже ООП? Если ФП такое крутое, то значит его будет все больше в разных областях?

а в ООП так нельзя, максимум список указателей на функции в ООП так и не надо, в ООП будет список объектов, нельзя же настолько прямые параллели пытаться проводить

dstarcev [1:27 AM] А можно пример работы с состоянием? Например, я хочу сделать вебсервер на Хаскеле, который при каждом запросе отдает число и увеличивает его на 1. И не использовать при этом никакие бд, все хранить в памяти и immutable структурах данных

dshevchenko [1:27 AM] так, секунду, много вопросов, друзья

astynax [1:27 AM] состояние - в замыкании

landstage [1:27 AM] Можно вопрос про миграции в Redis спросить? ) 1

kirill.mokevnin [1:28 AM] спросите в #databases

landstage [1:28 AM] ок

kirill.mokevnin [1:28 AM] этот канал лучше всего подойдет

astynax [1:28 AM] . надо было выделить отдельную комнату для Хацкеля.

kirill.mokevnin [1:28 AM] все что касается фп обсуждается в канале computer_science

dshevchenko [1:29 AM]

В высоком пороге вхождения. :simple_smile:

Если ФП такое крутое, то значит его будет все больше в разных областях?

Несомненно. Буквально за последние несколько лет мы видим положительное движение в эту сторону.

kirill.mokevnin [1:29 AM] а прямо сейчас задумано чтобы это было в general

dshevchenko [1:29 AM] Ведь даже в ООП-языки вставляют идеи из ФП.

[1:29] те же лямбды

[1:29] в С++ жили без них сто лет, что называется

[1:29] а в 2011 добавили таки

kirill.mokevnin [1:29 AM] @yel1owstone: docker, reactjs

vetal4eg [1:30 AM] Что писать на хаскеле - плохая идея?

dshevchenko [1:30 AM] отвечаю

johnconor [1:30 AM] писать на чем то новом всегда плохая идея

[1:31] есть же пословица - увидишь лиспера - гони его из проекта

[1:31] хаскелиста - также

dshevchenko [1:31 AM] На мой взгляд, плохая идея - писать на Хаскеле очень низкоуровенвый код. Микроконтроллеры например, где бал правит старый добрый С. Для такой области Хаскел - не лучший выбор.

dstarcev [1:32 AM] А валидация формочек и CRUD?

yel1owstone [1:32 AM] Значит ли сказанное выше, что лет через 50 функциональная парадигма станет доминирующей?

dshevchenko [1:32 AM] стоп, поясню

dpwiz [1:32 AM] валидация отлично пишется. monad power!

dshevchenko [1:32 AM] это важный вопрос

johnconor [1:32 AM] даже TDD внедрить - это уже нажить себе врагов

dshevchenko [1:33 AM] Станет ли ФП мейнстримом? И Хаскел в частности. Я сомневаюсь в этом. Однако в чём я уверен, так это в том, что идеи из ФП будут укреплять свои позиция в целом ряде языков. Мы это уже видим, мы увидим это ещё больше.

Да и потом. СМотрите, сколько появляется ФП-мероприятий? В России, на Украине, в Белоруси, я уже молчу про западный мир. Всё это говорит об интересе

[1:34] и не просто о научном интересе, но бизнес-интересе

yel1owstone [1:34 AM] Clash для fpga считается низкоуровневых применением хаскеля?

landstage [1:34 AM] Для каких задач разрабатывался haskell?

dshevchenko [1:35 AM] изначально?

[1:35] для научных

[1:35] компиляторы там, математика

[1:35] это был по сути экпириментальный язык

[1:35] мол, давайте сделаем самый правильный ФП язык

[1:35] вдруг получится?

[1:35] вроде получилось

johnconor [1:36 AM] есть ли выигрыш в хаскеле скажем в задаче поиска хэша для биткоин? помогают ли этому ленивые вычисления?

dshevchenko [1:36 AM] Ленивые вычисления помогают в целом ряде случаев. Однако теоретически они могут быть источником коварных проблем.

[1:36] жаль, но это так

dpwiz [1:37 AM] если на хаскеле взять DSL для разработки чипов, то есть

densom [1:37 AM] Да, сегодня даже вакансия появилась для rails разработчиков - желающих перейти на Elixir (функциональный подход)

dstarcev [1:37 AM] Есть ли какие-то динамические возможности в языке? Рефлексия?

dshevchenko [1:37 AM] я не силён в динамике, прошу простить

dpwiz [1:37 AM] @dstarcev: полно. хаскель это вообще лучший динамический язык

[1:37] и императивный тоже

mrtheyann [1:38 AM] читал не так давно такую штуку, там парень советует новичкам плюнуть на все существующие языки и сразу идти учить хаскель, резонно вообще, имеет смысл?

dshevchenko [1:38 AM] да

[1:38] определенно имеет смысл

astynax [1:38 AM] Вот, да. На Haskell можно писать абсолютно императивно и динамически. А на Java нельзя писать абсолютно функционально и с той же силой типов

dshevchenko [1:38 AM] вакансий-то мало. Это нужно учитывать

johnconor [1:38 AM] практически туда же ведет нас кирилл

abbath [1:39 AM] Я проспал вебинар

dshevchenko [1:39 AM] так мы ещё не закончили

johnconor [1:39 AM] грит сначала поймите что вы хотите запрограммировать, может там и не нужно ничего императивного

astynax [1:39 AM] Если тут человек цать освоят хаскель на остаточном уровне - можно создавать команду и всех задвигать!

abbath [1:40 AM] Но я его прочитал. Голосом Дениса у себя в голове

sergeytoylyev [1:40 AM] а какие есть библиотеки для машинного обучения?

dshevchenko [1:40 AM] не знаю, не интересовался этой темой

johnconor [1:40 AM] нейросети на хаскеле лучше получаются?

astynax [1:40 AM] @johnconor: императивное программирование с мутабельным состоянием, говорят - преждевременная оптимизация :simple_smile:

dshevchenko [1:40 AM] Кстати, вот, полный список Хаскельных библиотек

dstarcev [1:40 AM] А что вообще с либами драйверами для всяких СУБД классических и новомодных?

abbath [1:40 AM] Лучше всего получаются парсеры и DSL

astynax [1:40 AM] @sergeytoylyev: HaskellR

sergeytoylyev [1:41 AM] @astynax гугл не помог

vernat [1:41 AM] TDD применимо к Haskell?

abbath [1:41 AM] @dstarcev: есть

dshevchenko [1:41 AM] про SQL - в сегодняшнем выпуске подкаста

[1:41] TDD не нужно в Хаскел

[1:42] потому что многое берёт на себе компилятор

landstage [1:42 AM] а почему?

dshevchenko [1:42 AM] там не нужно писать много тестов

[1:42] это просто лишнее

dpwiz [1:42 AM] работает с модной СУБД постгрес и лучшим DSL для запросов - SQL

landstage [1:42 AM] есть же ошибки которые компилятор не может отловить имеется в виде с данными

dshevchenko [1:43 AM] верно, поэтому тесты нужны, но не так много, как в динамических языках, например

[1:43] намного меньше

sergeytoylyev [1:43 AM] спасибо

dshevchenko [1:43 AM] кстати, о TDD

[1:44] там Рома рассказывает про систему типов

[1:44] берущую на себя часть работы тестов

[1:44] очень круто получается

[1:44] система типов в Хаскеле - мощь! Но - она сложна в понимании

[1:44] то есть во азах - нет

[1:44] но в глубинах

alexelizarov [1:46 AM] Что нужно знать что бы с ней(системой типов) разобраться? Достаточно учить хаскелл и мы ее поймем? Или надо копать другие темы?

johnconor [1:46 AM] ну понимать там особо нечего, тип данных которые может вернуть функция жестко прописаны в самой функции

johnconor [1:46 AM] и которые принять - тоже

dshevchenko [1:46 AM] ну, почти всё

vshatalov [1:46 AM] русскоязычное сообщество где тусуется - куда можно с вопросами обращаться?

dshevchenko [1:47 AM] https://gitter.im/ruHaskell/forall

ruHaskell/forall Where developers come to talk.

abbath [1:47 AM] @johnconor: но сами то типы бывают интересными

mrtheyann [1:47 AM] используется ли haskell в связке с какими-то более мейнстримовыми технологиями?

dshevchenko [1:47 AM] с языками, в смысле?

mrtheyann [1:47 AM] да

dshevchenko [1:47 AM] да, можно

[1:48] и не только

astynax [1:48 AM] @mrtheyann: на хаскеле можно написать расширение к Python

[1:48] к хаскелю можно написать расширение на C/C++, подключить lua/python в качестве языка для скриптов

dshevchenko [1:48 AM] да, Хаскел дружит с интеграцией

abbath [1:49 AM] Еще шекспировские шаблоны

dshevchenko [1:49 AM] не всегда там всё идеально, но весьма неплохо

johnconor [1:49 AM] технически на хаскеле можно написать dll и примотать ее к любому проекту

densom [1:49 AM] Где документация?

dshevchenko [1:49 AM] один из примеров интеграции

[1:49] http://ohaskell.dshevchenko.biz/ru/integration/c-from-haskell.html О Haskell по-человечески. Книга о прекрасном и удивительном языке. Для обыкновенных программистов.

[1:49] устаревший правда

[1:49] сейчас можно круче

[1:50] я её использую

[1:50] для поиска доков

dstarcev [1:51 AM] Как реализована многопоточность в Хаскеле?

[1:51] что с вводом выводом, блокирующий или асинхронный?

johnconor [1:51 AM] есть вообще то разница многопоточность и распараллеливание

abbath [1:52 AM] @dstarcev: есть целая книга о параллельном и конкурентном программировании в хаскеле

dstarcev [1:52 AM] у меня есть эта книга) еще не начал

astynax [1:52 AM] Отличная книга, просто шикарная, кстати!

dshevchenko [1:53 AM] да, книга отличная, от Саймона Марлоу

abbath [1:53 AM] @dstarcev: ввод вывод есть даже ленивый

dshevchenko [1:53 AM] одного из создателей ghc

astynax [1:53 AM] Ах да, Хаскель ещё и на GPU умеет :simple_smile:

Add Comment dstarcev [1:53 AM] оно?

dshevchenko [1:53 AM] точно

astynax [1:53 AM] Ага, от Марлоу

dstarcev [1:53 AM] с нее знакомство с языком норм начинать?

dshevchenko [1:53 AM] нет

[1:53] она не для новичков

abbath [1:53 AM] Не поймешь

dstarcev [1:54 AM] черт(

dshevchenko [1:54 AM] но и не для корифеев

[1:54] с азами познакомиться и - можно

astynax [1:54 AM] Денис, она довольно простым языком рассказывает, всё же! Но не годится на роль первой, тут согласен(edited)

dshevchenko [1:54 AM] нет, не годится

monad [1:54 AM] "изучай haskell во имя добра"

dshevchenko [1:55 AM] https://hexlet-ru.slack.com/archives/general/p1454698691003451 dshevchenko Книг по Хаскелу на сегодняшний день весьма много. Правда, большинство из них на английском, но у многих из нас с этим проблем ведь нет? :simple_smile:

Для самых новичков я рекомендую мою книгу: http://ohaskell.dshevchenko.biz/ru/index.html. С самых азов, и до интересных вещей. К сожалению, она далека от совершенства, поэтому - сообщаю по секрету! - я сейчас работаю над версие 2.0, почти полностью обновлённой.

Далее есть вот эта книга: http://www.ozon.ru/context/detail/id/8696277/. Примерно как моя, но чуток подробнее (хотя и воды многовато, на мой взгляд). Show more. Today at 12:58 AM

dstarcev [1:55 AM] надо было сначала сделать вебинар, а потом мне книгу выбирать( 1

astynax [1:55 AM] LyAH нынче deprecated в пользу HaskellBook, но мне в своё время очень помогла/понравилась

[1:56] @dstarcev: ты начни "О Хаскель" денисову читать и с середины уже можешь заглядывать в свою

abbath [1:56 AM] @dstarcev: книга никуда не денется

dshevchenko [1:56 AM] Книга Антона не очень лёгкая

[1:56] к сожалению

astynax [1:56 AM] Она хороша, как вторая

dshevchenko [1:56 AM] для совсем новичков я бы не рекомендовал

[1:57] а как вторая да

monad [1:57 AM] согласен)

andrey_ash [1:57 AM] http://www.cis.upenn.edu/

astynax [1:58 AM] хороший курс, а после него - NICTA

dshevchenko [1:58 AM] И да, друзья, на всякий случай! В моей книге про монады написано не совсем верно! В следующей версии всё будет лучше. 1 1

[1:58] на тот момент я многого ещё не понимал

vernat [1:58 AM] тогда надо убрать книгу из продакшна :simple_smile: накати срочный багфикс

johnconor [1:59 AM] зато мне стало понятней

dshevchenko [1:59 AM] не, там быстро не получится, нужно целый ряд глав править

kalisto [1:59 AM] @dshevchenko: Все равно во много раз лучше понимаете чем я.

johnconor [1:59 AM] фунция в хаскеле - это то что не меняется, монада - это то что меняется, программа - сумма меняющихся и неменяющихся частей

vernat [2:00 AM] правильно ли я понимаю, что на текущий момент http://haskellbook.com лучшая для новичков?

Haskell Programming A Haskell book for beginners that works for non-programmers and experienced hackers alike.

dpwiz [2:00 AM] да, по построению (=(edited)

dshevchenko [2:00 AM] Монада вовсе не обязана меняться.

[2:00] и это лишь больше запутывает

И да, друзья, на всякий случай! В моей книге про монады написано не совсем верно! В следующей версии всё будет лучше. Если вас не затруднит - скажите пожалуйста когда она выйдет сюда, в этот чат. Я читал первую, вторую тоже прочитаю, но за Haskell-ресурсами не слежу.

dstarcev [2:01 AM] про монады я слышал объяснение в контексте Скалы, что это такая штука, которую можно создать из значения функцией unit и мапить на другие монады функцией flatMap

dpwiz [2:01 AM] монады формируют последовательность вычислений. всё. без них весь код волен исполняться в произвольном порядке.

dstarcev [2:01 AM] и типа композиции делать на монадах

abbath [2:02 AM] @dpwiz: и ты туда же

dpwiz [2:02 AM] ну это перевод тайпкласса на русский

[2:03] сначала >>= а потом >>= и так далее

astynax [2:04 AM] Есть же дуализм: "монада, как вычисление" и "монада, как контейнер" :simple_smile:

dshevchenko [2:04 AM] Друзья, я прошу прощения! У нас в Армении уже полночь, а моя младшая дочка не спит. Я вынужден вас покинуть.

Большое спасибо всем за вопросы. Извинения прошу у тех, кому не успел или не смог ответить. 10

dpwiz [2:04 AM] первому блоку доступен только контекст, второму - контекст и результат первого, третьему - контекст и результаты первых двух

dshevchenko [2:04 AM] надеюсь, увидимся alexelizarov [2:05 AM] Спасибо за вебинар! dstarcev [2:05 AM] спасибо mrtheyann [2:05 AM] спасибо за вебинар! monad [2:05 AM] спасибо! densom [2:05 AM] Ок, спасибо andrey_ash [2:05 AM] Спасибо!

abbath [2:05 AM] Почему никто не вспомнил теорию категорий

dpwiz [2:06 AM] вспоминали

[2:06] решили, что не нужна

vernat [2:06 AM] в начале вспомнили и решили не заморачиваться

abbath [2:06 AM] Нужна

astynax [2:06 AM] Вспоминали, но предпочли не форсировать :simple_smile:

abbath [2:06 AM] Милевский хорошо пишет

vernat [2:06 AM] Денис спасибо!

abbath [2:06 AM] Доступно

astynax [2:06 AM] Всем итак понятно, что монада, это буррито!

dshevchenko [11:02 AM]

После изучения Хаскела возможно надо быть готовым к переезду в другую страну. Сегодня это было в обсуждении

Не совсем так. Многие компании ищут удалённых сотрудников. Из всех зарубежных Haskell-работодателей как минимум одна треть согласна на удалёнку.

тем более, что его фундамент основан на все той же императивной парадигме

Смотря что считать фундаментом. Если перезаписывание байтов на уровне физической памяти - тогда да, все языки можно назвать "обёрткой вокруг ассемблера".

основы лямбда исчисления и теории типов не помешает знать

Не помешает, но ни в коем случае не является требованием.

на haskell не возможно писать не понимая эти вещи

Вполне возможно. Я же пишу. Поверь мне, с теорией типов я не знаком.

johnconor [11:16 AM] хаскель, это да, хоп - и сразу в дамки, и высокая зарплата и заграничный работодатель )

[11:17] это вам не бложики на вордпрессе клепать

dshevchenko [11:51 AM]

многие компании не ищут работников явно.

Это правда. Если говорить за Haskell - ищите вакансии в первую очередь на reddit, twitter и Haskell Cafe (наш основной mailing list).

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

Да, если есть (хотя бы) средние навыки и хороший английский.

[11:52] А многие сразу требуют commercial experience.

[11:52] а где ж в России его получить? Замкнутый круг получается, к сожалению.

[11:53] меня взяли без коммерческого опыта, но я был уже известен в Haskell-кругах, и наш CTO уже знал обо мне как о докладчике, энтузиасте, а также авторе книги про Хаскел.

[11:53] без этого всего меня бы не взяли..

[11:55] Поэтому с Хаскел-вакансиями интересная ситуация наблюдается. С одной стороны их очень мало (относительно мэйнстрим-языков), но именно поэтому, когда очередная появляется - она как искра в темноте, её сразу же замечают и набрасываются на неё.. Именно поэтому Хаскел-вакансии не висят открытыми по месяцам, такое просто невозможно.

johnconor [11:56 AM] может быть потому хаскелистов всего 2000 (это даже не капля в море, это даже на следовые включения не тянет) потому что джуниоров брать не практикуют )

dshevchenko [11:56 AM] Джуниоров берут, но редко

[11:56] например, недавно в FB нанимали intern на Хаскел

Facebook Careers Research Intern (Functional Programming) Facebook's mission is to make the world more open and connected. Come work with us and do what you love.

[11:57] правда, не на удалёнку, конечно.

может быть потому хаскелистов всего 2000

Честно признаться, я округлил в плюс.

[11:59] Помню, когда я предложил моему бывшему руководителю внедрить у нас Хаскел (переписать FastCGI-сервис с С++ на Хаскел), он сказал мне, цитирую: "Проблема с Хаскел в том, что в России его знают три человека, включая тебя."(edited)

[12:01] Разумеется, есть много Хаскел-энтузиастов, и их гораздо больше двух тысяч. То есть за деньги они программируют на других языках, но в Хаскел вникают весьма глубоко.

[12:01] у нас в чате таких много.

[12:02] Это смешной вопрос на ФП-конференциях, когда в зал обращаются, мол, поднимите руки те, кто работают с ФП-языками? Поднимается много рук. А потом уточняют, мол, ЗА ДЕНЬГИ. И остаётся пара-тройка рук.

johnconor [12:02 PM] в россии его знают три человека, хех, товарищи, я лично знаю трех человек которые на нем бы писали только дай зарплату

dshevchenko [12:03 PM] @johnconor: Ты прав, очень многие хотели бы работать с Хаскелом.

[12:03] но вакансий гораздо меньше соискателей

johnconor [12:03 PM] я лично знаю трех человек, исключая тебя )))

dshevchenko [12:04 PM] Да в нашем чате таких несколько десятков!

johnconor [12:04 PM] а русский веб в основном написан людьми которые на сях вообщеб ничего не смогли написать

dshevchenko [12:05 PM] внедрение ФП в России - очень медленный процесс. Работодатели смотрят на соискателей, те - на работодателей. Все хотят, чтобы ДРУГОЙ сделал первый шаг. :simple_smile:

[12:06] "Вот когда я услышу про 100500 success-stories внедрения этого вашего Хаскела в продакшн в России - вот тогда и начну таких людей нанимать. "

"Вот когда я на hh.ru увижу 100500 Хаскельных вакансий - вот тогда и начну его изучать."(edited)

johnconor [12:08 PM] нуда, думаю никто из работодателей не хочет на своих личных плечах вытащить всю индустрию

dshevchenko [12:09 PM] Да, но тогда как же поднялся тот же Питон и Руби? Да 8-9 лет назад в России таких вакансий днём с огнём не найти было. А сегодня - их уже сотни. Ведь кто-то же начал. 4

[12:09] потом второй, потом третий.

kirill.mokevnin [12:09 PM] ну и не хаскелем единым, у кложи дела по лучше будут

dshevchenko [12:10 PM] и у Скалы тоже

pny [12:10 PM] да и ерланг встречается

dshevchenko [12:10 PM] верно

johnconor [12:10 PM] про руби и питон - волна начала подниматься с программистов-эмигрантов, именно от них я получил первые сигналы

dshevchenko [12:10 PM] Кстати, 3 марта митап намечается

[12:11] И Кложа, и Скала, и Эрланг

[12:11] может быть даже и Хаскел

[12:11] если докладчики будут

kirill.mokevnin [12:12 PM] да уже тут рекламировали, у олега балбекова много засланцев)

johnconor [12:12 PM] думал руби, питон, это все такой хайскил что даже эмигрантов тащут

[12:12] оказалось блин )))

[12:13] оказалось языки такие простые что можно детям преподавать

dshevchenko [12:15 PM] Всё, друзья, прошу простить, дела. До связи. Думаю, я теперь тут буду появляться периодически.

📎📎📎📎📎📎📎📎📎📎