learnhaskell/guide-ru.md

339 lines
17 KiB
Markdown
Raw Normal View History

2015-07-29 04:06:38 +00:00
# Как познать Haskell
2015-07-29 05:49:43 +00:00
Этот документ - рекомендованный путь к изучению языка Haskell, основанный на опыте помощи другим
2015-07-29 04:06:38 +00:00
2015-07-29 05:49:43 +00:00
## Это руководство доступно на других языках:
2015-07-29 04:06:38 +00:00
* [In English](README.md)
* [Auf Deutsch](guide-de.md)
<!-- * [Στην ελληνική](guide-el.md) -->
* [En Español](guide-es.md)
* [En Français](guide-fr.md)
* [In Italiano](guide-it.md)
* [Em Português](guide-pt.md)
* [繁體中文](guide-zh_tw.md)
2015-07-29 05:49:43 +00:00
#### *Не страдайте над одним топиком, который вы не можете понять сразу*. Двигайтесь дальше!
2015-07-29 04:06:38 +00:00
## Сообщество
IRC канал `#haskell-beginners` на Freenode.
IRC веб-клиент [здесь](http://webchat.freenode.net/).
[Почтовые рассылки](https://wiki.haskell.org/Mailing_lists).
2015-07-29 05:49:43 +00:00
### Политика сообщества
[Смотрите пост про обучение от Криса Дона](http://chrisdone.com/posts/teaching)
Будьте дружелюбны и вежливы. Грубость и хамство испугает собеседника
и отталкнет от участия в общении.
Слабая, неконструктивная критика удовлетворяет лишь
критикующего, но не помогает критикуемому.
Не описывайте вещи как "легкие" или "тривиальные".
Вы заставляете людей чувствовать себя ужасно за то,
что они усердно и много работают ради своего прогресса.
Медленно-обучающиеся люди зачастую самые дотошные обучающиеся,
этому наоборот надо радоваться!
Не симулируйте удивление. Не изображайте удивление, когда кто-либо
говорит, что он не знает что-то. Они будут чувствовать себя ужасно,
а вы не получите ничего, кроме резкости.
"ну, на самом деле". Когда кто-либо говорит что-то почти -
но не совсем - верное,
а вы говорите "ну, на самом деле..." и даете лишь мелкую правку.
Это особенно раздражает, когда поправка не относится к основной
теме разговора. Это не значит,
что этот канал не про поиск правды или что нам все равно на точность.
Просто почти все "ну, на самом деле" являются показухой, а не поиском правды.
Не делайте всю работу за обучающегося.
Если вы ввидите, что человек работает над проблемой,
вы не должны немедлено выдавать советы или готовые решения.
Дайте ему поработать и поизучать,
пока он сам не попросит помощи.
Избегать помех - [одна из основных причин существования #haskell-beginners](http://chrisdone.com/posts/teaching).
Никаких -измов. Расизм, сексизм, гомофобия,
трансофобия и другие виды фобий не приветствуются и не будут приняты терпимо.
---
[Правила хорошего тона от Recurse Center](https://www.recurse.com/manual). Спасибо за их публикацию Recurse Center.
# Что такое Haskell, GHC и Cabal?
Haskell - это язык программирования, изложенный в спецификациях,
последняя опубликована в 2010 году.
Эта спецификация доступна как [онлайн-документ](http://www.haskell.org/onlinereport/haskell2010/).
## GHC
[GHC](http://www.haskell.org/ghc/) - это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпритатор), пакетный менеджер и другие полезные вещи.
## Cabal
[Cabal](https://www.haskell.org/cabal/download.html) осуществляет менеджмент проектов и разрешение зависимостей.
Это способ установить проект, обычно в их песочницу (изолированное окружение).
Cabal аналогичен Bundler в Ruby, pip в Python, NPM в Node и так далее. GHC управляет пакетами сам, Cabal решает какие версии устанавливать.
2015-07-29 07:05:01 +00:00
# Установка Haskell
## НЕ УСТАНАВЛИВАЙТЕ HASKELL PLATFORM
Вместо следования инструкциям на Haskell.org, смотри инструкции ниже, как установить GHC и Cabal.
2015-07-29 05:49:43 +00:00
# Установка GHC и Cabal
## Ubuntu
[Этот PPA](http://launchpad.net/~hvr/+archive/ghc) лучший и именно его я использую на
всех моих серверах и локальных машинах с Linux.
А именно:
```bash
$ 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.
2015-07-29 06:25:05 +00:00
## Debian
2015-07-29 05:49:43 +00:00
2015-07-29 06:25:05 +00:00
### Использование Ubuntu PPA
2015-07-29 05:49:43 +00:00
2015-07-29 06:25:05 +00:00
Если вы не используете стабильный дистрибутив, вы можете повторить все теже шаги,
что и для Ubuntu, но вам надо будет выполнить дополнительную команду.
Сразу после `sudo add-apt-repository -y ppa:hvr/ghc` выполните:
```bash
$ 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+ будут содержать его в официальном):
```bash
$ 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](https://copr.fedoraproject.org/coprs/petersen/ghc-7.8.4/)
этот ghc не может быть установлен вместе с Fedora/EPEL ghc.
## Arch Linux
Чтобы установить Haskell из официального репо на Arch Linux, выполните:
```bash
$ 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
Как только это сделано,
```bash
$ emerge -jav dev-lang/ghc dev-haskell/cabal-install
```
Gentoo хранит "стабильную" (читай "старую") версию `cabal-install` в дереве Portage, так что, если вы хотите использовать более современную версию `cabal-install`, выполните (заметтье, что слеши здесь нужны)
```bash
$ \cabal update # Слеши здесь
$ \cabal install cabal-install # нужны
```
Вы установили cabal глобально через Portage и локально в вашей домашней директории с `cabal-install`.
Следующий шаг, это убедиться, что когда вы запускаете `cabal` в вашем терминале,
ваша оболочка запускает последнюю версию в вашей домашней директории.
Вам нужно добавить следующие строки к конфигурационному файлу вашей оболочки.
```bash
PATH=$PATH:$HOME/.cabal/bin
alias cabal="$HOME/.cabal/bin/cabal"
```
Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки - `~/.bashrc`. Если вы используете Z-shell, то это `~/.zshrc`. Вы можете понять, какая оболочка у вас используется, запустив:
```bash
echo $SHELL | xargs basename
```
Я использую zsh, так что вывод этой команды у меня выглядит как `zsh`.
После всего этого вы захотите установить дополнительные инструменты `alex` и `happy`.
```bash
$ cabal install alex happy
```
Поздравляю! Теперь у вас рабочий Haskell!
## Mac OS X
### 10.9
Установите [GHC для Mac OS X](http://ghcformacosx.github.io/) приложение,
которе включает в себя GHC и Cabal.
Оно предоставляет инструкции, как добавить GHC и Cabal в ваш путь,
после того как вы скопируете приложение `.app` куда-либо.
### 10.6-10.8
Выполните установку бинарников, которая описана ниже,
для [этого архива](https://www.haskell.org/platform/download/2014.2.0.0/ghc-7.8.3-x86_64-apple-darwin-r3.tar.bz2).
## Windows
- [Минимальный установщик GHC для Windows](http://neilmitchell.blogspot.com/2014/12/beta-testing-windows-minimal-ghc.html)
способен скомпилировать `network` и тп. Технически, это бета версия,
но должна работать для тех, кто читает это руководство.
Не забудьте запустить установщик как администратор, так как он захочет установить файлы в Program Files.
## Пользователям других Linux дистрибутивов
Скачайте последние бинарники cabal и ghc:
- [GHC](http://www.haskell.org/ghc/).
- [Cabal](https://www.haskell.org/cabal/download.html).
## Пользователям других Unix-подобных систем
Скачайте GHC и Cabal из вашего пакетного менеджера,
затем добавьте `~/.cabal/bin` в ваше `$PATH`.
Поосле этого обновите `cabal` и установите дополнительные инструменты `alex` и `happy`.
```bash
$ cabal update
$ cabal install cabal-install alex happy
```
2015-07-29 07:05:01 +00:00
# Как я должен изучать Haskell?
Основная рекомендация, это читать лекции и выполнять все упражнения/домашние задания для Spring 13 версии курса cis194.
Затем то же для курса NICTA.
На оба курса ссылки представлены ниже.
Все остальное может быть рассмотрено как опциональное,
и вы просто будете знать куда смотреть по определенной теме.
## Курс Yorgey cis194
> *Выполните его в первую очередь*, это лучший путь получить представление о Haskell
Доступен [онлайн](http://www.seas.upenn.edu/~cis194/spring13/lectures.html).
Курс от [Brent Yorgey](https://byorgey.wordpress.com), это лучшее, что я пока нашел.
Этот курс ценен тем, что он не только научит вас писать базовый код на Haskell,
но и также поможет вам понять комбинаторы парсера.
Единственная причина, по которой вам не стоит начинать с курса cis194,
это если вы не программист или вы неопытный программист.
В этом случае, начинайте с [книги от Thompson](http://www.haskellcraft.com/craft3e/Home.html)
и после этого уже курс cis194.
---
## Курс NICTA
> Этот курс мы рекомендуем выполнять после курса Yorgey cis194.
Доступен на Github [здесь](https://github.com/NICTA/course).
Этот курс укрепит и добавит опыта реализации абстракций,
представленых в курсе cis194.
Эта практика *критически важна* для комфортного использования
в дальнейшем таких абстракций как Functor/Applicative/Monad/и тп. в Haskell.
Выполнение cis194 и затем NICTA курсов представляет собой основную рекомендацию моего руководства и того, как научить любого языку Haskell.
---
## Дополнительный курс после cis194 и NICTA
> Предоставляет больше информации по продвинутым темам
cs240h доступен [онлайн](http://www.scs.stanford.edu/14sp-cs240h/).
Это онлайн курс от [Bryan O'Sullivan](https://github.com/bos), который он преподает в Стенфорде.
Если вы не знаете кто он такой, взгляните на половину библиотек,
от которых зависят все приложения на Haskell, и вы увидите его имя в их авторах.
Если вы уже закончили курс Yorgey, особого внимания в этом курсе заслуживают разделы о фантомных типах, контроле потоков информации, расширениях языка, конкурентном выполнении, pipes и линзах.
---
# Специфичные топики Haskell
Эти источники не были проверены на учащихся так, как cis194 и NICTA, но с их помощью вы поймете с чего начинать изучение определенной темы. Они включают продвинутые и сложные темы и топики посвященные инструментам и текстовым редакторам.
<!-- TODO: translate information from specific_topics.md -->
## Диалоги
> Хранятся в этом репозитории [здесь](dialogues.md).
Они на самом деле достаточно важны и полезны. Просмотрите для погружения в некоторые из тем.
2015-07-29 07:05:01 +00:00