Добавлен , опубликован
Не бойся, участь стать функциональщиком тебе, скорее всего, не грозит. Этому будут мешать следующие факторы:
  • Нужно очень хорошо знать матчасть, иначе изучение языка прервется слишком рано.
  • Пациент должен изначально показывать функциональные наклонности (любите лямбда выражения? замыкания? любите строить длинные цепочки функций? Тогда Haskell идет к вам)
Язык обещает вам ускорение разработки, исчезновения большинства ошибок, легкое тестирование и изгнание оставшихся, бесплатный параллелизм; но какой ценой? Он требует вашу душу, требует отказаться от "побочных эффектов", то есть всех глобальных и не очень переменных, требует забыть все, что вы знали о программировании до этого. Ты попадаешь в мир математики, где величественные формулы медленно проплывают мимо тебя, где нету понятия времени (пока ты его не формализуешь), где все существовало всегда и будет существовать всегда. Это суть функционального программирования - это мир математики.
(WRONG IMAGE URL - imageshack)
Самое страшное, что все что предлагает Haskell, является правдой, но только после тотальной "ломки" мозга. Я не буду приводить примеры программ, это опасно и бессмысленно (но если очень хочется смотри внизу книжки).

В чем проблема языка

После долгого изучения основ языка хотелось попробовать написать что-то. Haskell имеет огромный репозиторий пакетов HackageDB на все случаи жизни: тут есть и игровые движки, и фреймворки для веб разработки, специальные DSL языки для моделирования электросхем и т.д. Тут и появляется реальность, чтобы преподать урок: чтобы скомпилировать один из пакетов, нужно скомпилировать все зависимости. Скорость выпуска мажорных версий для основного компилятора ghc поражает воображение, разработчики банально не успевают за языком. Приходится держать 10 версий компилятора и столько же разных веток пакетов и зависимостей, так как что компилируется ghc-7.0 не компилируется ghc-7.4. Это меня и доканало, постоянная чехарда с зависимостями убивает все желание разрабатывать.
Также есть вторая проблема, Haskell идеален в окружении себя. Когда встает необходимость работать с OpenGL, OpenCL и другими нефункциональными интерфейсами, очень легко наткнуться на малопонятные баги и архитектурные проблемы. Моя попытка адаптировать язык для gamedev (Используя пакет GPipe) наткнулась на необходимость описывать изменение камеры в тысячах call-back'ов от OpenGL и системы ввода.

Зачем нужно знать Haskell

Возможно после изучения языка ты и не станешь его апологетом, но он дает очень много новых концепций (хех, монады например) и приемов, которые можно использовать и в других языках. То есть ты станешь сильнее после познания темной стороны силы! А я вернусь к своему уютному D и буду творить дальше свой движок.

Литература

  • Для новичков я бы посоветовал шикарную книжку "Изучай Haskell во имя добра" Миран Липовача. В ней более менее последовательно объясняют все необходимые концепции языка в понятной и несложной форме.
  • Для дальнейшего чтения "14 занимательных эссе о языке Haskell и функциональном программировании" Душкин Р.В. Там описаны инструменты для работы с языком, теория и типовые задачи.