|
|
|
|
# Як вивчати Haskell
|
|
|
|
|
|
|
|
|
|
Цей документ є рекомендованим шляхом вивчання Haskell, який ґрунтується на досвіді допомоги іншим.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Інші переклади
|
|
|
|
|
|
|
|
|
|
* [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)
|
|
|
|
|
|
|
|
|
|
* [По-русски](guide-ru.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### *Не намагайтесь одразу зрозуміти все*. Краще продовжуйте вивчати!
|
|
|
|
|
|
|
|
|
|
## Ком’юніті
|
|
|
|
|
|
|
|
|
|
Наш канал в IRC - `#haskell-beginners` на серверах Freenode.
|
|
|
|
|
|
|
|
|
|
Веб-інтерфейс для IRC [here](http://webchat.freenode.net/).
|
|
|
|
|
|
|
|
|
|
Пов'язані з Haskell [поштові розсилки](https://wiki.haskell.org/Mailing_lists).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Норми та правила ком'юніті
|
|
|
|
|
|
|
|
|
|
[Прочитайте допис Кріса Дона присвячений навчанню](http://chrisdone.com/posts/teaching)
|
|
|
|
|
|
|
|
|
|
Будьте ввічливими та доброзичливими. Грубість та неввічливість відлякують людей і відбивають в них бажання співпрацювати.
|
|
|
|
|
|
|
|
|
|
Легковажна і зверхня критика не сприймається адресатом і задовільняє лише того, хто критикує.
|
|
|
|
|
|
|
|
|
|
Не описуйте речі як "легкі" або "тривіальні". Цим ви змусите людей почуватись жахливо через важку работу над їхнім прогресом. Люди, що навчаються повільно, водночас є найбільш стараними учнями і це є радше приводом для радощів!
|
|
|
|
|
|
|
|
|
|
Не треба удаваного здивування. Не зображуйте подив, коли хтось каже, що він чогось не знає. Люди знов таки будуть почуватись жахливо, а ви не досягнете майже нічого окрім різкості.
|
|
|
|
|
|
|
|
|
|
Ніяких "Насправді". Хтось каже щось, що майже, але не цілковито, правильне, і тут ви кажете "насправді..." і додаєте малосуттєве виправлення. Особливо це дратує, коли виправлення не має мало спільного з темою обговорення. Це не значить, що наша спільнота не орієнтована на пошук істини чи що ми не вважаємо, що точність важлива. Майже усі "насправді" призначені для самозвеличення, а не для пошуку істини.
|
|
|
|
|
|
|
|
|
|
Намагайтесь не забігати поперед учня. Не треба періодично влізати із порадами якщо ви бачите, що людина працює над проблемою. Дайте їй шанс подолати проблему самотужки, а вже потім звернутися за порадою. Уникнення втручаннь є одним з найважливіших задумів #haskell-beginners.
|
|
|
|
|
|
|
|
|
|
Ніяких -измів, навіть важкопомітних або замаскованих. Расизм, сексизм, гомофобія, трансфобія та інші види упередженності у жодному разі не припускаються.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ви отримаєте зауваження, якщо ви не займаєтесь відвертим тролінгом, але зважайте на те, що цей канал присвячено виключно тим людям, які вивчают самі або вчать програмуванню на Haskell інших.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Що таке Haskell, GHC та Cabal?
|
|
|
|
|
|
|
|
|
|
Haskell - це мова програмування, яка описується в доповідях. Остання на сьогодні доповідь була зроблена в 2010 році і доступна [за цим посиланням](http://www.haskell.org/onlinereport/haskell2010/).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Встановлення Haskell
|
|
|
|
|
|
|
|
|
|
## НЕ ВСТАНОВЛЮЙТЕ HASKELL PLATFORM
|
|
|
|
|
|
|
|
|
|
Замість того, щоб слідувати інструкції на Haskell.org, виконайте наступні вказівки для встановлення GHC та Cabal.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## GHC
|
|
|
|
|
|
|
|
|
|
[GHC](http://www.haskell.org/ghc/) (Glasgow Haskell Compiler) є найбільш популярним шляхом роботи з мовою Haskell. Це пакет, що включає в себе компілятор, інтерпретатор командного рядка, менеджер пакетів та ще деякі речі.
|
|
|
|
|
|
|
|
|
|
## Cabal
|
|
|
|
|
|
|
|
|
|
[Cabal](https://www.haskell.org/cabal/download.html) є інструментом з керування проектом та розв'язання залежностей. Завдяки йому ви будете встановлювати проекти, начастіше в їхнє власне ізольоване середовище.
|
|
|
|
|
|
|
|
|
|
Cabal - це еквівалент Bundler в Ruby, pip в Python, NPM в Node.js, Maven і таке інше. GHC самостійно займається обслуговуванням пакунків, але Cabal обирає версії для інсталяції.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Встановлення GHC та Cabal
|
|
|
|
|
|
|
|
|
|
## Ubuntu
|
|
|
|
|
|
|
|
|
|
[Цей PPA](http://launchpad.net/~hvr/+archive/ghc) є майже бездоганним и саме його рекомендується використовувати.
|
|
|
|
|
|
|
|
|
|
Покроково:
|
|
|
|
|
|
|
|
|
|
```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, etc):
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
~/.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
|
|
|
|
|
|
|
|
|
|
Якщо ви не використовуєте стабільну гілку Debian, то можете виконати ті ж самі кроки, що й для 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` в цьому файлі.
|
|
|
|
|
|
|
|
|
|
### Компіляція власноруч
|
|
|
|
|
|
|
|
|
|
Для Mac OS X була створена [ця](http://www.davesquared.net/2014/05/platformless-haskell.html) інструкція.
|
|
|
|
|
|
|
|
|
|
Примітки:
|
|
|
|
|
|
|
|
|
|
- Встановіть правильний префікс перед компіляцією 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
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В дереві Portage Gentoo містить "стабільні" (читай: застарілі) версії `cabal-install`, тож якщо ви хочете використовувати `cabal-install` для інсталяції останніх версії пакетів, виконайте наступні команди (зважайте на зворотні слеші, вони там навмісно):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ \cabal update # The backslashes
|
|
|
|
|
$ \cabal install cabal-install # are intentional
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таким чином ви встановили системний пакет 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` and `happy`.
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ cabal install alex happy
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Вітаю! Тепер ви маєте працюючу інсталяцію Haskell!
|
|
|
|
|
|
|
|
|
|
## Mac OS X
|
|
|
|
|
|
|
|
|
|
### 10.9
|
|
|
|
|
|
|
|
|
|
Встановіть додаток [GHC for Mac OS X](http://ghcformacosx.github.io/), в який включено GHC та Cabal. Додаток містить опис того, як додати GHC та Cabal до вашого системного шляху після того, як ви кудись встановите `.app`.
|
|
|
|
|
|
|
|
|
|
### 10.6-10.8
|
|
|
|
|
|
|
|
|
|
Треба виконати встановлення готового дистрибутиву із [цього tarball](https://www.haskell.org/platform/download/2014.2.0.0/ghc-7.8.3-x86_64-apple-darwin-r3.tar.bz2). Інструкції по встановленню див. нижче.
|
|
|
|
|
|
|
|
|
|
## Windows
|
|
|
|
|
|
|
|
|
|
- [Мінімальний встановник GHC](https://github.com/fpco/minghc#using-the-installer) вміє скомпілювати `network` та інші бібліотеки. Він містить мінімальну версію середовища GHC разом із Cabal та MSYS (середовище для компілятора, яке надає можливість встановлювати пакети накшталт `network`)
|
|
|
|
|
|
|
|
|
|
Web-сторінка [minghc](https://github.com/fpco/minghc) містить трохи додаткових деталей, але зауважте, що за замовченням встановлення відбудеться у вашу локальну директорію AppData, а не глобально на всю систему.
|
|
|
|
|
(C:\Users\<username>\AppData\Local\Programs)
|
|
|
|
|
|
|
|
|
|
## Інші версії 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
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Як мені слід вивчати Haskell?
|
|
|
|
|
|
|
|
|
|
Основна рекомендація - прочитати лекції та пройти всі вправи та домашні завдання версії Sprint 13 курсу cis194, потім пройти курс NICTA (посилання на обидва курси нижче). Все інше можна вважати додатковим матеріалом, який згадується для того, щоб ви знали, де шукати.
|
|
|
|
|
|
|
|
|
|
## Курс cis194 від Yorgey
|
|
|
|
|
|
|
|
|
|
> *ПОЧНІТЬ З ЦЬОГО*, це головний шлях занурення в Haskell, який ми рекомендуємо.
|
|
|
|
|
|
|
|
|
|
Доступний [онлайн](http://www.seas.upenn.edu/~cis194/spring13/lectures.html).
|
|
|
|
|
|
|
|
|
|
Курс [Брента Йорґі](https://byorgey.wordpress.com) (Brent Yorgey) - найкращій курс, який я знайшов на сьогодні. Особлива цінність цього курсу в тому, що він не тільки навчить вас як писати базові речі на Haskell, але й допоможе зрозуміти комбінатори парсера.
|
|
|
|
|
|
|
|
|
|
Не слід починати з cis194 тільки в тому випадку, коли ви не програміст або програміст із маленьким досвідом. В цьому разі почніть з [цієї книги Томпсона](http://www.haskellcraft.com/craft3e/Home.html), після чого переходьте до cis194.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Курс NICTA
|
|
|
|
|
|
|
|
|
|
> Цей курс рекомендовано до вивчання після закінчення курсу 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/).
|
|
|
|
|
|
|
|
|
|
Цей курс, створений Брайаном О'Салліваном(https://github.com/bos) за мотивами його викладацької діяльності в університеті Стенфорду.
|
|
|
|
|
Щоб уявити хто це, зауважте такий факт: половина бібліотек, від яких залежить майже будь-яка програма на Haskell, містить його ім'я серед авторів. Після проходження курсу Йорґі особливо зверніть увагу на модулі присвячені фантомним типам, контролю потоку інформації, розширенням мови, сумісному виконанню, pipes та лінзам.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Ресурси, що розглядають конкретні теми Haskell
|
|
|
|
|
|
|
|
|
|
На додаток пропонуються матеріали, присвячені поглибленному вивчанню більш складних тем, а також обговорюють інструменти розробки та текстові редактори. Ці матеріали не були випробувані у навчальних цілях так ретельно, як cis194 та NICTA, але їх список можна передивитись [тут](specific_topics-ua.md).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Діалоги
|
|
|
|
|
|
|
|
|
|
> Діалоги знаходяться [в цьому документі](dialogues-ua.md).
|
|
|
|
|
|
|
|
|
|
Це дуже важлива та корисна інформація. Зазирніть туди щоб заглибитись у різноманітні теми.
|