Haskell - это язык программирования, изложенный в спецификациях,
Haskell — это язык программирования, изложенный в спецификациях,
последняя версия которых опубликована в 2010 году.
Эта спецификация доступна как [онлайн-документ](http://www.haskell.org/onlinereport/haskell2010/).
## GHC
[GHC](http://www.haskell.org/ghc/) - это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпритатор), пакетный менеджер и другие полезные вещи.
[GHC](http://www.haskell.org/ghc/) — это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпретатор), пакетный менеджер и другие полезные вещи.
Gentoo хранит "стабильную" (читай "старую") версию `cabal-install` в дереве Portage, так что, если вы хотите использовать более современную версию `cabal-install`, выполните (заметтье, что слеши здесь нужны)
Gentoo хранит «стабильную» (читай «старую») версию `cabal-install` в дереве Portage, так что, если вы хотите использовать более современную версию `cabal-install`, выполните (заметьте, что слеши здесь нужны)
```bash
$ \cabal update # Слеши здесь
@ -210,7 +209,7 @@ PATH=$PATH:$HOME/.cabal/bin
alias cabal="$HOME/.cabal/bin/cabal"
```
Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки -`~/.bashrc`. Если вы используете Z-shell, то это `~/.zshrc`. Вы можете понять, какая оболочка у вас используется, запустив:
Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки —`~/.bashrc`. Если вы используете Z-shell, то это `~/.zshrc`. Вы можете понять, какая оболочка у вас используется, запустив:
```bash
echo $SHELL | xargs basename
@ -235,7 +234,7 @@ $ cabal install alex happy
Оно предоставляет инструкции, как добавить GHC и Cabal в ваш путь,
после того как вы скопируете приложение `.app` куда-либо.
### 10.6-10.8
### 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).
@ -243,14 +242,14 @@ $ cabal install alex happy
## Windows
- [Минимальный установщик GHC для Windows](http://neilmitchell.blogspot.com/2014/12/beta-testing-windows-minimal-ghc.html)
способен скомпилировать `network` и тп. Технически, это бета версия,
способен скомпилировать `network` и т.п. Технически, это бета версия,
но должна работать для тех, кто читает это руководство.
Не забудьте запустить установщик как администратор, так как он захочет установить файлы в Program Files.
## Пользователям других Linux дистрибутивов
Скачайте последние бинарники cabal и ghc:
Скачайте последние бинарники Cabal и GHC:
- [GHC](http://www.haskell.org/ghc/).
@ -297,12 +296,12 @@ $ cabal install cabal-install alex happy
> Этот курс мы рекомендуем выполнять после курса Yorgey cis194.
Доступен на Github [здесь](https://github.com/NICTA/course).
[Доступен на Github](https://github.com/NICTA/course).
Этот курс укрепит и добавит опыта реализации абстракций,
представленых в курсе cis194.
Эта практика *критически важна* для комфортного использования
в дальнейшем таких абстракций как Functor/Applicative/Monad/и тп. в Haskell.
в дальнейшем таких абстракций как Functor/Applicative/Monad/и т.п. в Haskell.
Выполнение cis194 и затем NICTA курсов представляет собой основную рекомендацию моего руководства и того, как научить любого языку Haskell.
---
@ -313,7 +312,7 @@ $ cabal install cabal-install alex happy
Это онлайн курс от [Bryan O'Sullivan](https://github.com/bos), который он преподает в Стенфорде.
Это онлайн курс от [Bryan O’Sullivan](https://github.com/bos), который он преподает в Стенфорде.
Если вы не знаете кто он такой, взгляните на половину библиотек,
от которых зависят все приложения на Haskell, и вы увидите его имя в их авторах.
Если вы уже закончили курс Yorgey, особого внимания в этом курсе заслуживают разделы о фантомных типах, контроле потоков информации, расширениях языка, конкурентном выполнении, pipes и линзах.
- [Этот рассказ](https://vimeo.com/73648150) от Tony отлично мотивирует трансформеры монад, [слайды](https://dl.dropboxusercontent.com/u/7810909/talks/monad-transformers/cbaa991e0eb49224eb286c1e418e2b9828e1fb21/monad-transformers.pdf).
Также, реализуйте `Control.Monad`. Функции типа `mapM` или `sequence` - хорошая
Также, реализуйте `Control.Monad`. Функции типа `mapM` или `sequence` — хорошая
возможность попрактиковаться в написании общего кода монад.
Курс NICTA может быть использован как руководство для этого, он также включает написание
@ -435,9 +433,9 @@ Writer, State) для себя, чтобы понять их лучше. Зат
Упоминания:
- Комментарии на Reddit от htmltyp и Crandom [здесь](http://www.reddit.com/r/haskell/comments/29eke6/basic_program_ideas_for_learning_about_monads/cik5aj6).
- [Комментарии](http://www.reddit.com/r/haskell/comments/29eke6/basic_program_ideas_for_learning_about_monads/cik5aj6) на Reddit от htmltyp и Crandom.
- Комментарий на Reddit от jozefg [здесь](http://www.reddit.com/r/haskell/comments/29eke6/basic_program_ideas_for_learning_about_monads/cik5trg).
- [Комментарий](http://www.reddit.com/r/haskell/comments/29eke6/basic_program_ideas_for_learning_about_monads/cik5trg) на Reddit от jozefg.
## Трансформеры монад
@ -447,7 +445,7 @@ Writer, State) для себя, чтобы понять их лучше. Зат
Например, взгляните на результат поиска для [`(a -> b) -> [a] -> [b]`](http://www.haskell.org/hoogle/?hoogle=%28a+-%3E+b%29+-%3E+%5ba%5d+-%3E+%5bb%5d).
Так же он доступен на fpcomplete [здесь](https://www.fpcomplete.com/hoogle).
Так же он доступен [на fpcomplete](https://www.fpcomplete.com/hoogle).
Еще есть [Hayoo](http://holumbus.fh-wedel.de/hayoo/hayoo.html) (который включает все пакеты
Как только вы почувствуюте себя комфортно с Haskell, очень рекомендую изучить Lenses
и Prisms, даже лишь в качестве "пользователя". Вам не обязательно нужно понимать лежащую
и Prisms, даже лишь в качестве «пользователя». Вам не обязательно нужно понимать лежащую
в основе категорию для того, чтобы они были полезны.
Люди зачастую завышают сложность использования линз. Все, кто комфортно чувствует
себя используя Functor/Foldable/Traversable (или даже если лишь первый) могут
начать использовать линзы и призмы для облегчения своей жизни.
Если вы когда-либо делали что-то вроде: `(fmap . fmap)`, вы уже "использовали линзы"
Если вы когда-либо делали что-то вроде: `(fmap . fmap)`, вы уже «использовали линзы»
в своей голове.
Я рекомендую следующие два руководства:
@ -706,10 +700,9 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [An introduction to recursion schemes](http://patrickthomson.ghost.io/an-introduction-to-recursion-schemes/)
- [Don't fear the cat](http://fho.f12n.de/posts/2014-05-07-dont-fear-the-cat.html) -
Хорошая демонстрация того, как hylomorphism, это композиция из cata и ana.
- [Don’t fear the cat](http://fho.f12n.de/posts/2014-05-07-dont-fear-the-cat.html) — хорошая демонстрация того, как hylomorphism, это композиция из cata и ana
- [Recursion Schemes](http://comonad.com/reader/2009/recursion-schemes/) - это
- [Recursion Schemes](http://comonad.com/reader/2009/recursion-schemes/) — это
руководство просто замечательно!
- [Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire](http://eprints.eemcs.utwente.nl/7281/01/db-utwente-40501F46.pdf)
@ -720,15 +713,15 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [Write Haskell as Fast as C](write_haskell_as_fast_as_c.md)
- [StackExchange question: What is the difference between propositions and judgements](http://cstheory.stackexchange.com/questions/9826/what-is-the-difference-between-propositions-and-judgments).
- [StackExchange question: What is the difference between propositions and judgements](http://cstheory.stackexchange.com/questions/9826/what-is-the-difference-between-propositions-and-judgments)
- [Lecture notes from a short, three lecture course](http://www.ae-info.org/attach/User/Martin-L%C3%B6f_Per/OtherInformation/article.pdf)
# Зависимая типизация
- [Grokking sum types, value constructors, and type constructors](http://bitemyapp.com/posts/2014-04-05-grokking-sums-and-constructors.html) squint hard.
- [Grokking sum types, value constructors, and type constructors](http://bitemyapp.com/posts/2014-04-05-grokking-sums-and-constructors.html) squint hard