Язык программирования 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)
Сборник трудов Романа Душкина
кроме того, есть ряд подробных статей, посвящённые отдельным аспектам языка. Например, в статьях широко рассматриваются монады.

Комментарии
12.05.2014 в 11:26

тролль - это не только ценный жир, но и 3-4 легкоусвояемых коммента ежедневно
спасибо за выборку информации в сжатом виде

а большой ли смысл изучать чисто функциональные ЯП, когда есть немало более удобных простому смертному смешанных ЯП (с корпускулярно-волновым дуализмом: императивные и функциональные одновременно), в которых функции - объекты первого класса (т.е., где можно писать функции, принимающие на вход функцию как параметр и возвращающие как результат другую функцию)?
вот, например, как в Lua можно написать функцию факториала, если кодер сильно пришиблен функциональным подходом:



хотелось бы услышать частное мнение, в чём положительные стороны чисто функциональных языков (кроме тренировки мозга непривычной хренью)?
12.05.2014 в 22:25

> а большой ли смысл изучать чисто функциональные ЯП

Как знание одного императивного существенно помогает разбирать код на других императивных языках (даже почти незнакомых), так и знание одного функционального поможет разбирать функциональный код в функциональных языках, так и в смешанных тоже.
Например, стремительно набирающий популярность Python поддерживает много функциональных фич (ссылка 1, ссылка 2).

Что касается момента, на примере какого языка лучше учить функциональщину - на смешанном или на чисто функциональном языке, то есть я бы выбрал чисто функциональный язык по следующим причинам:
- вы не найдёте много литературы, которая вас научит функциональному мышлению и одновременно программировать на Питоне (или на другом императивном). Как правило, функциональные фичи для смешанных языков объясняются скудно (для тех, кто и так знает, что это такое и как это применять). В учебниках по Хаскелю этому всё-таки уделено больше времени.
- синтаксис Хаскеля разрабатывался, как синтаксис функционального языка, и там концепция укладывается в красивую чёткую структуру. в то время как в смешанных языках это выглядит, как странные костыли.

Так учить или не учить? Дам одну холиварную ссылку 2012 года (читать с комментариями), где известный Роман Душкин (darkus) пишет о том, что язык, несмотря на все усилия, так и остаётся непопулярным: habrahabr.ru/post/163283/

Вот так записывается факториал на Хаскеле:

Есть сигнатура функции, по которой видно, что функция факториал принимает целое число и на выходе тоже получается целое число. В левой части записываются образцы (может быть несколько образцов), с которыми идёт сопоставление, далее возможна проверка некоторого условия (необязательного), и если проверка прошла успешно, вся левая часть заменяется на правую. Замена происходит до тех пор, пока не получится вычислимое выражение (оно может упрощаться по мере подстановки).
12.05.2014 в 22:39

Вот так записывается факториал на Хаскеле
Из-за того, что вы учитываете отрицательные числа, пример не очень выразительно выглядит. А вообще, пример факториала на Хаскелл - это, конечно же, www.willamette.edu/~fruehr/haskell/evolution.ht...
12.05.2014 в 22:43

smll, а у вас еще клёвые ссылки по Хаскелю есть? :)
12.05.2014 в 22:50

Trotil, Из русского материала могу разве что добавить Саймон Пейтон Джонс - Язык и библиотеки Haskell 98 - раскрывает глаза на некоторые вещи. А может вообще стоит начинать изучать Хаскелл с математического функционального программирования =). А вообще, по моему скромному мнению, с литературой на русском по Хаскелл-у не всё очень хорошо. Но и из английской могу предложить разве что Real World Haskell, потому что с английским у меня, к сожалению, туго.
13.05.2014 в 01:46

Bastard
Господа, могу посоветовать к изучению Erlang.
После C++ это была просто манна небесная. Изолированность процессов. Никакой разделяемой памяти. Никаких битых указателей. Скорость, часто близкая к C (арифметика конечно тугая правда, да).