17 KiB
Как познать Haskell
Этот документ - рекомендованный путь к изучению языка Haskell, основанный на опыте помощи другим
Это руководство доступно на других языках:
Не страдайте над одним топиком, который вы не можете понять сразу. Двигайтесь дальше!
Сообщество
IRC канал #haskell-beginners
на Freenode.
IRC веб-клиент здесь.
Политика сообщества
Смотрите пост про обучение от Криса Дона
Будьте дружелюбны и вежливы. Грубость и хамство испугает собеседника и отталкнет от участия в общении.
Слабая, неконструктивная критика удовлетворяет лишь критикующего, но не помогает критикуемому.
Не описывайте вещи как "легкие" или "тривиальные". Вы заставляете людей чувствовать себя ужасно за то, что они усердно и много работают ради своего прогресса. Медленно-обучающиеся люди зачастую самые дотошные обучающиеся, этому наоборот надо радоваться!
Не симулируйте удивление. Не изображайте удивление, когда кто-либо говорит, что он не знает что-то. Они будут чувствовать себя ужасно, а вы не получите ничего, кроме резкости.
"ну, на самом деле". Когда кто-либо говорит что-то почти - но не совсем - верное, а вы говорите "ну, на самом деле..." и даете лишь мелкую правку. Это особенно раздражает, когда поправка не относится к основной теме разговора. Это не значит, что этот канал не про поиск правды или что нам все равно на точность. Просто почти все "ну, на самом деле" являются показухой, а не поиском правды.
Не делайте всю работу за обучающегося. Если вы ввидите, что человек работает над проблемой, вы не должны немедлено выдавать советы или готовые решения. Дайте ему поработать и поизучать, пока он сам не попросит помощи. Избегать помех - одна из основных причин существования #haskell-beginners.
Никаких -измов. Расизм, сексизм, гомофобия, трансофобия и другие виды фобий не приветствуются и не будут приняты терпимо.
Правила хорошего тона от Recurse Center. Спасибо за их публикацию Recurse Center.
Что такое Haskell, GHC и Cabal?
Haskell - это язык программирования, изложенный в спецификациях, последняя опубликована в 2010 году. Эта спецификация доступна как онлайн-документ.
GHC
GHC - это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпритатор), пакетный менеджер и другие полезные вещи.
Cabal
Cabal осуществляет менеджмент проектов и разрешение зависимостей. Это способ установить проект, обычно в их песочницу (изолированное окружение).
Cabal аналогичен Bundler в Ruby, pip в Python, NPM в Node и так далее. GHC управляет пакетами сам, Cabal решает какие версии устанавливать.
Установка Haskell
НЕ УСТАНАВЛИВАЙТЕ HASKELL PLATFORM
Вместо следования инструкциям на Haskell.org, смотри инструкции ниже, как установить GHC и Cabal.
Установка GHC и Cabal
Ubuntu
Этот PPA лучший и именно его я использую на всех моих серверах и локальных машинах с Linux.
А именно:
$ sudo apt-get update
$ sudo apt-get install python-software-properties # v12.04 and below
$ sudo apt-get install software-properties-common # v12.10 and above
$ sudo add-apt-repository -y ppa:hvr/ghc
$ sudo apt-get update
$ sudo apt-get install cabal-install-1.22 ghc-7.8.4 happy-1.19.5 alex-3.1.4
После этого, добавьте следующие пути к вашему $PATH
(bash_profile, zshrc, bashrc, и тп):
export PATH=$PATH:~/.cabal/bin:/opt/cabal/1.22/bin:/opt/ghc/7.8.4/bin:/opt/happy/1.19.5/bin:/opt/alex/3.1.4/bin
Опционально: вы можете добавить также .cabal-sandbox/bin
к вашему пути.
Код, который вы разрабатываете будет доступен вам из командной строки.
Это работает только тогда, когда ваша текущая рабочая папка - песочница cabal.
Debian
Использование Ubuntu PPA
Если вы не используете стабильный дистрибутив, вы можете повторить все теже шаги,
что и для Ubuntu, но вам надо будет выполнить дополнительную команду.
Сразу после sudo add-apt-repository -y ppa:hvr/ghc
выполните:
$ sudo sed -i s/jessie/trusty/g /etc/apt/sources.list.d/hvr-ghc-jessie.list
Для остальных версий Debian, просто замените все jessie
именем вашей версии в команде выше.
Если по какой-то причине файл /etc/apt/sources.list.d/hvr-ghc-jessie.list
не существует, то /etc/apt/sources.list
должен содержать строку со ссылкой вроде этой:
deb http://ppa.launchpad.net/hvr/ghc/ubuntu jessie main
Замените jessie
на trusty
в этой строке.
Сборка из исходников
Вы можете использовать [это руководство] (http://www.davesquared.net/2014/05/platformless-haskell.html), написанное для Mac OS X:
Замечания:
- Выставьте ваш префикс соответственно, когда конфигурируете ghc.
- Вместо того, чтобы забирать бинарник
cabal-install
, скачайте исходный код и запустите скриптbootstrap.sh
.
Fedora 21
Чтобы уставновить Haskell 7.8.4 из неофициального репо (Fedora 22+ будут содержать его в официальном):
$ sudo yum-config-manager --add-repo \
> https://copr.fedoraproject.org/coprs/petersen/ghc-7.8.4/repo/fedora-21/petersen-ghc-7.8.4-fedora-21.repo
$ sudo yum install ghc cabal-install
Как указано на странице petersen/ghc-7.8.4 этот ghc не может быть установлен вместе с Fedora/EPEL ghc.
Arch Linux
Чтобы установить Haskell из официального репо на Arch Linux, выполните:
$ sudo pacman -S cabal-install ghc happy alex haddock
Gentoo
На Gentoo вы можете установить индивидуальные компоненты Haskell Platform через Portage.
Если вы используете ACCEPT_KEYWORDS=arch
(вместо ACCEPT_KEYWORDS=~arch
),
Portage установит древние версии различных компонент Haskell. Помня это, если вы используете ACCEPT_KEYWORDS=arch
, добавьте следующие строки в /etc/portage/package.keywords
.
dev-haskell/cabal-install
dev-lang/ghc
Как только это сделано,
$ emerge -jav dev-lang/ghc dev-haskell/cabal-install
Gentoo хранит "стабильную" (читай "старую") версию cabal-install
в дереве Portage, так что, если вы хотите использовать более современную версию cabal-install
, выполните (заметтье, что слеши здесь нужны)
$ \cabal update # Слеши здесь
$ \cabal install cabal-install # нужны
Вы установили cabal глобально через Portage и локально в вашей домашней директории с cabal-install
.
Следующий шаг, это убедиться, что когда вы запускаете cabal
в вашем терминале,
ваша оболочка запускает последнюю версию в вашей домашней директории.
Вам нужно добавить следующие строки к конфигурационному файлу вашей оболочки.
PATH=$PATH:$HOME/.cabal/bin
alias cabal="$HOME/.cabal/bin/cabal"
Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки - ~/.bashrc
. Если вы используете Z-shell, то это ~/.zshrc
. Вы можете понять, какая оболочка у вас используется, запустив:
echo $SHELL | xargs basename
Я использую zsh, так что вывод этой команды у меня выглядит как zsh
.
После всего этого вы захотите установить дополнительные инструменты alex
и happy
.
$ cabal install alex happy
Поздравляю! Теперь у вас рабочий Haskell!
Mac OS X
10.9
Установите GHC для Mac OS X приложение,
которе включает в себя GHC и Cabal.
Оно предоставляет инструкции, как добавить GHC и Cabal в ваш путь,
после того как вы скопируете приложение .app
куда-либо.
10.6-10.8
Выполните установку бинарников, которая описана ниже, для этого архива.
Windows
- Минимальный установщик GHC для Windows
способен скомпилировать
network
и тп. Технически, это бета версия, но должна работать для тех, кто читает это руководство.
Не забудьте запустить установщик как администратор, так как он захочет установить файлы в Program Files.
Пользователям других Linux дистрибутивов
Скачайте последние бинарники cabal и ghc:
Пользователям других Unix-подобных систем
Скачайте GHC и Cabal из вашего пакетного менеджера,
затем добавьте ~/.cabal/bin
в ваше $PATH
.
Поосле этого обновите cabal
и установите дополнительные инструменты alex
и happy
.
$ cabal update
$ cabal install cabal-install alex happy
Как я должен изучать Haskell?
Основная рекомендация, это читать лекции и выполнять все упражнения/домашние задания для Spring 13 версии курса cis194. Затем то же для курса NICTA. На оба курса ссылки представлены ниже. Все остальное может быть рассмотрено как опциональное, и вы просто будете знать куда смотреть по определенной теме.
Курс Yorgey cis194
Выполните его в первую очередь, это лучший путь получить представление о Haskell
Доступен онлайн.
Курс от Brent Yorgey, это лучшее, что я пока нашел. Этот курс ценен тем, что он не только научит вас писать базовый код на Haskell, но и также поможет вам понять комбинаторы парсера.
Единственная причина, по которой вам не стоит начинать с курса cis194, это если вы не программист или вы неопытный программист. В этом случае, начинайте с книги от Thompson и после этого уже курс cis194.
Курс NICTA
Этот курс мы рекомендуем выполнять после курса Yorgey cis194.
Доступен на Github здесь.
Этот курс укрепит и добавит опыта реализации абстракций, представленых в курсе cis194. Эта практика критически важна для комфортного использования в дальнейшем таких абстракций как Functor/Applicative/Monad/и тп. в Haskell. Выполнение cis194 и затем NICTA курсов представляет собой основную рекомендацию моего руководства и того, как научить любого языку Haskell.
Дополнительный курс после cis194 и NICTA
Предоставляет больше информации по продвинутым темам
cs240h доступен онлайн.
Это онлайн курс от Bryan O'Sullivan, который он преподает в Стенфорде. Если вы не знаете кто он такой, взгляните на половину библиотек, от которых зависят все приложения на Haskell, и вы увидите его имя в их авторах. Если вы уже закончили курс Yorgey, особого внимания в этом курсе заслуживают разделы о фантомных типах, контроле потоков информации, расширениях языка, конкурентном выполнении, pipes и линзах.
Специфичные топики Haskell
Эти источники не были проверены на учащихся так, как cis194 и NICTA, но с их помощью вы поймете с чего начинать изучение определенной темы. Они включают продвинутые и сложные темы и топики посвященные инструментам и текстовым редакторам.
Диалоги
Хранятся в этом репозитории здесь.
Они на самом деле достаточно важны и полезны. Просмотрите для погружения в некоторые из тем.