Язык программирования Haskell - функциональный язык. Это принципиально иной подход к программированию, отличный от привычного нам императивного (процедурного, объектно-ориентированного) подхода в мейнстримных языках программирования.
Причины, по которым имеет смысл изучить Haskell:
- можно прокачать свой мозг семантически интересным языком
- в новых версиях императивных языков (пример: C++11, Python) вводят функциональные элементы. Ваше знакомство с функциональным подходом к программированию поможет вам максимально эффективно использовать эти фичи
- часть некоторых алгоритмических задач действительно удобнее запрограммировать на Хаскеле, чем на классических языках
К минусам следует отнести то, что Haskell - язык медленный, и для серьёзных вычислительных задач он пока не подходит. Однако смотрите раздел данной статьи про эффективность языка. Многие проблемы решаются.
Я попробовал здесь собрать коллекцию лучших в основном русскоязычных материалов о языке в помощь тем, кто захочет узнать его поподробнее. Дополнительный критерий отбора - полнота изложения.
Вводная часть о языке: в этом разделе ссылки в виде кратких статей для тех, кто хочет обзорно познакомиться с Хаскелем и функциональном подходом к программированию:
(предупреждение - не воспринимайте эти статьи, как учебники. Учебники разделом ниже!)
1) википедия
2) очень сжатое описание языка на хабре: Через тернии к Haskell: Часть 1, Часть 2. (здесь на 6 страницах пересказ учебника на 500 страниц
)
3) Мягкое введение в Haskell: Часть 1, Часть 2
4) Некоторые статьи с хабра: habrahabr.ru/hub/haskell/posts/page13/ (просматривайте с последней страницы)
Некоторые базовые учебники о языке (примечание - здесь только та литература, на которой я остановился)
1) Изучай Haskell во имя добра! Миран Липовача, ДМК-Пресс (2012, тираж допечатан в 2013 и 2014 году) - весёлый и подробный учебник по языку.
2) О Haskell по-человечески: dshevchenko.biz/hs/ (две части)
3) видеолекции А.А.Кубенского (первые 4 лекции): видеолекции, страница курса
4) Beginning Haskell: A Project-Based Approach (издательством Питер готовится русский перевод к зиме 2014-2015 годов) - отзыв
Комментарии:
- источники 2 и 3 бесплатно распространяются в сети; 1 и 4 платные, но купить эти книги проблематично (нет в магазинах), но их можно найти через поисковики книг и скачать для ознакомления
- У Дениса Шевченко (источник 2) в данный момент готова только одна часть. Во второй части автор обещает рассмотреть разработку небольшого проекта с использованием полезных практических фич языка.
- затрудняюсь посоветовать, с какого рекомендованного источника лучше начать знакомство. Посмотрите их все и определите для себя удобный вам порядок. Возможно, вам понравится что-то еще из дополнительной литературы.
- у А.А.Кубенского 5-8 лекции посвящены другим аспектам функционального программирования, к Хаскелю они имеют опосредственное отношение. Их можно не смотреть.
- источник 4 самый интересный, на мой взгляд по содержанию, темам и примерам, 16 глав увлекательного чтива. Некоторые современные аспекты языка описаны только там.
- логичным продолжением базовой подборки материала является книга "Parallel and Concurrent Programming in Haskell" (см. ниже)
Чтобы хорошо привыкнуть к новой парадигме программирования и синтаксису, рекомендую порешать учебные задачки.
Лабораторные работы и практикумы:
- Практикум Кубенского:
старые задачи, их подробный разбор есть в видеолекциях: sites.google.com/site/kubenskiy/Home/fall2011/f...
новые задачи: sites.google.com/site/kubenskiy/Home/fall2013/f...
- greg.southural.ru/science/MakeevGA-Haskell.pdf (стр. 96 - 110)
- kchri.narod.ru/labs.zip
Комментарии:
- у Григория Макеева неплохой практикум в конце учебника. Сам учебник недостаточно подробный, поэтому я не стал его рекомендовать для изучения, но практикум интересный
- я не нашёл практикума по монадам и функторам.
Эффективное и продвинутое использование языка Haskell. После изучения базовых концепций, возможно, вам захочется писать быстрые и эффективные и оптимизированные программы. Вам поможет ряд ссылок:
Принципы быстрого Хаскеля под GHC
Parallel and Concurrent Programming in Haskell (отзыв)
Haskell Performance
Data_Parallel_Haskell и Haskell for multicores
Примеры написания программ и решения конкурсных задач на Хаскеле на русском языке можно посмотреть в книгах Душкина:
Альманах "конкурсы функционального программирования" 2013 года, 2012 года, 2011 года, 14 серьёзных эссе о языке. См. также ЖЖ автора (см. ниже).
Скрипты на Хаскеле.
Также полезен хаб Хаскеля на хабре.
Напоследок приведу основные ресурсы по Хаскелю:
haskell.org
ru.haskell.org - русскоязычный подраздел
хороший новостной русскоязычный агрегатор по ФП
http://users.livejournal.com/_darkus_, где можно почерпнуть много ссылок по теме, навигация по ЖЖ Prev & Next расположена слева.
Online-компилятор Haskell
Некоторые прочие русскоязычные книги, не упомянутые выше:
Учебник по Haskell Холомьев Антон (2012)
Сборник трудов Романа Душкина
кроме того, есть ряд подробных статей, посвящённые отдельным аспектам языка. Например, в статьях широко рассматриваются монады.
Причины, по которым имеет смысл изучить Haskell:
- можно прокачать свой мозг семантически интересным языком
- в новых версиях императивных языков (пример: C++11, Python) вводят функциональные элементы. Ваше знакомство с функциональным подходом к программированию поможет вам максимально эффективно использовать эти фичи
- часть некоторых алгоритмических задач действительно удобнее запрограммировать на Хаскеле, чем на классических языках
К минусам следует отнести то, что Haskell - язык медленный, и для серьёзных вычислительных задач он пока не подходит. Однако смотрите раздел данной статьи про эффективность языка. Многие проблемы решаются.
Я попробовал здесь собрать коллекцию лучших в основном русскоязычных материалов о языке в помощь тем, кто захочет узнать его поподробнее. Дополнительный критерий отбора - полнота изложения.
Вводная часть о языке: в этом разделе ссылки в виде кратких статей для тех, кто хочет обзорно познакомиться с Хаскелем и функциональном подходом к программированию:
(предупреждение - не воспринимайте эти статьи, как учебники. Учебники разделом ниже!)
1) википедия
2) очень сжатое описание языка на хабре: Через тернии к Haskell: Часть 1, Часть 2. (здесь на 6 страницах пересказ учебника на 500 страниц

3) Мягкое введение в Haskell: Часть 1, Часть 2
4) Некоторые статьи с хабра: habrahabr.ru/hub/haskell/posts/page13/ (просматривайте с последней страницы)
Некоторые базовые учебники о языке (примечание - здесь только та литература, на которой я остановился)
1) Изучай Haskell во имя добра! Миран Липовача, ДМК-Пресс (2012, тираж допечатан в 2013 и 2014 году) - весёлый и подробный учебник по языку.
2) О Haskell по-человечески: dshevchenko.biz/hs/ (две части)
3) видеолекции А.А.Кубенского (первые 4 лекции): видеолекции, страница курса
4) Beginning Haskell: A Project-Based Approach (издательством Питер готовится русский перевод к зиме 2014-2015 годов) - отзыв
Комментарии:
- источники 2 и 3 бесплатно распространяются в сети; 1 и 4 платные, но купить эти книги проблематично (нет в магазинах), но их можно найти через поисковики книг и скачать для ознакомления
- У Дениса Шевченко (источник 2) в данный момент готова только одна часть. Во второй части автор обещает рассмотреть разработку небольшого проекта с использованием полезных практических фич языка.
- затрудняюсь посоветовать, с какого рекомендованного источника лучше начать знакомство. Посмотрите их все и определите для себя удобный вам порядок. Возможно, вам понравится что-то еще из дополнительной литературы.
- у А.А.Кубенского 5-8 лекции посвящены другим аспектам функционального программирования, к Хаскелю они имеют опосредственное отношение. Их можно не смотреть.
- источник 4 самый интересный, на мой взгляд по содержанию, темам и примерам, 16 глав увлекательного чтива. Некоторые современные аспекты языка описаны только там.
- логичным продолжением базовой подборки материала является книга "Parallel and Concurrent Programming in Haskell" (см. ниже)
Чтобы хорошо привыкнуть к новой парадигме программирования и синтаксису, рекомендую порешать учебные задачки.
Лабораторные работы и практикумы:
- Практикум Кубенского:
старые задачи, их подробный разбор есть в видеолекциях: sites.google.com/site/kubenskiy/Home/fall2011/f...
новые задачи: sites.google.com/site/kubenskiy/Home/fall2013/f...
- greg.southural.ru/science/MakeevGA-Haskell.pdf (стр. 96 - 110)
- kchri.narod.ru/labs.zip
Комментарии:
- у Григория Макеева неплохой практикум в конце учебника. Сам учебник недостаточно подробный, поэтому я не стал его рекомендовать для изучения, но практикум интересный
- я не нашёл практикума по монадам и функторам.
Эффективное и продвинутое использование языка Haskell. После изучения базовых концепций, возможно, вам захочется писать быстрые и эффективные и оптимизированные программы. Вам поможет ряд ссылок:
Принципы быстрого Хаскеля под GHC
Parallel and Concurrent Programming in Haskell (отзыв)
Haskell Performance
Data_Parallel_Haskell и Haskell for multicores
Примеры написания программ и решения конкурсных задач на Хаскеле на русском языке можно посмотреть в книгах Душкина:
Альманах "конкурсы функционального программирования" 2013 года, 2012 года, 2011 года, 14 серьёзных эссе о языке. См. также ЖЖ автора (см. ниже).
Скрипты на Хаскеле.
Также полезен хаб Хаскеля на хабре.
Напоследок приведу основные ресурсы по Хаскелю:
haskell.org
ru.haskell.org - русскоязычный подраздел
хороший новостной русскоязычный агрегатор по ФП
http://users.livejournal.com/_darkus_, где можно почерпнуть много ссылок по теме, навигация по ЖЖ Prev & Next расположена слева.
Online-компилятор Haskell
Некоторые прочие русскоязычные книги, не упомянутые выше:
Учебник по Haskell Холомьев Антон (2012)
Сборник трудов Романа Душкина
кроме того, есть ряд подробных статей, посвящённые отдельным аспектам языка. Например, в статьях широко рассматриваются монады.
а большой ли смысл изучать чисто функциональные ЯП, когда есть немало более удобных простому смертному смешанных ЯП (с корпускулярно-волновым дуализмом: императивные и функциональные одновременно), в которых функции - объекты первого класса (т.е., где можно писать функции, принимающие на вход функцию как параметр и возвращающие как результат другую функцию)?
вот, например, как в Lua можно написать функцию факториала, если кодер сильно пришиблен функциональным подходом:
хотелось бы услышать частное мнение, в чём положительные стороны чисто функциональных языков (кроме тренировки мозга непривычной хренью)?
Как знание одного императивного существенно помогает разбирать код на других императивных языках (даже почти незнакомых), так и знание одного функционального поможет разбирать функциональный код в функциональных языках, так и в смешанных тоже.
Например, стремительно набирающий популярность Python поддерживает много функциональных фич (ссылка 1, ссылка 2).
Что касается момента, на примере какого языка лучше учить функциональщину - на смешанном или на чисто функциональном языке, то есть я бы выбрал чисто функциональный язык по следующим причинам:
- вы не найдёте много литературы, которая вас научит функциональному мышлению и одновременно программировать на Питоне (или на другом императивном). Как правило, функциональные фичи для смешанных языков объясняются скудно (для тех, кто и так знает, что это такое и как это применять). В учебниках по Хаскелю этому всё-таки уделено больше времени.
- синтаксис Хаскеля разрабатывался, как синтаксис функционального языка, и там концепция укладывается в красивую чёткую структуру. в то время как в смешанных языках это выглядит, как странные костыли.
Так учить или не учить? Дам одну холиварную ссылку 2012 года (читать с комментариями), где известный Роман Душкин (darkus) пишет о том, что язык, несмотря на все усилия, так и остаётся непопулярным: habrahabr.ru/post/163283/
Вот так записывается факториал на Хаскеле:
Есть сигнатура функции, по которой видно, что функция факториал принимает целое число и на выходе тоже получается целое число. В левой части записываются образцы (может быть несколько образцов), с которыми идёт сопоставление, далее возможна проверка некоторого условия (необязательного), и если проверка прошла успешно, вся левая часть заменяется на правую. Замена происходит до тех пор, пока не получится вычислимое выражение (оно может упрощаться по мере подстановки).
Из-за того, что вы учитываете отрицательные числа, пример не очень выразительно выглядит. А вообще, пример факториала на Хаскелл - это, конечно же, www.willamette.edu/~fruehr/haskell/evolution.ht...
После C++ это была просто манна небесная. Изолированность процессов. Никакой разделяемой памяти. Никаких битых указателей. Скорость, часто близкая к C (арифметика конечно тугая правда, да).