Fix mdash

This commit is contained in:
Roman Shamin 2015-08-07 10:20:18 +03:00
parent 0faf54968b
commit 3f43e58863

View File

@ -1,6 +1,6 @@
# Как познать Haskell # Как познать Haskell
Этот документ - рекомендованный путь к изучению языка Haskell, основанный на опыте помощи другим Этот документ — рекомендованный путь к изучению языка Haskell, основанный на опыте помощи другим
## Это руководство доступно на других языках: ## Это руководство доступно на других языках:
@ -52,7 +52,7 @@ IRC веб-клиент [здесь](http://webchat.freenode.net/).
а вы не получите ничего, кроме резкости. а вы не получите ничего, кроме резкости.
"ну, на самом деле". Когда кто-либо говорит что-то почти - "ну, на самом деле". Когда кто-либо говорит что-то почти -
но не совсем - верное, но не совсем — верное,
а вы говорите "ну, на самом деле..." и даете лишь мелкую правку. а вы говорите "ну, на самом деле..." и даете лишь мелкую правку.
Это особенно раздражает, когда поправка не относится к основной Это особенно раздражает, когда поправка не относится к основной
теме разговора. Это не значит, теме разговора. Это не значит,
@ -64,7 +64,7 @@ IRC веб-клиент [здесь](http://webchat.freenode.net/).
вы не должны немедлено выдавать советы или готовые решения. вы не должны немедлено выдавать советы или готовые решения.
Дайте ему поработать и поизучать, Дайте ему поработать и поизучать,
пока он сам не попросит помощи. пока он сам не попросит помощи.
Избегать помех - [одна из основных причин существования #haskell-beginners](http://chrisdone.com/posts/teaching). Избегать помех — [одна из основных причин существования #haskell-beginners](http://chrisdone.com/posts/teaching).
Никаких -измов. Расизм, сексизм, гомофобия, Никаких -измов. Расизм, сексизм, гомофобия,
трансофобия и другие виды фобий не приветствуются и не будут приняты терпимо. трансофобия и другие виды фобий не приветствуются и не будут приняты терпимо.
@ -75,13 +75,13 @@ IRC веб-клиент [здесь](http://webchat.freenode.net/).
# Что такое Haskell, GHC и Cabal? # Что такое Haskell, GHC и Cabal?
Haskell - это язык программирования, изложенный в спецификациях, Haskell — это язык программирования, изложенный в спецификациях,
последняя версия которых опубликована в 2010 году. последняя версия которых опубликована в 2010 году.
Эта спецификация доступна как [онлайн-документ](http://www.haskell.org/onlinereport/haskell2010/). Эта спецификация доступна как [онлайн-документ](http://www.haskell.org/onlinereport/haskell2010/).
## GHC ## GHC
[GHC](http://www.haskell.org/ghc/) - это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпретатор), пакетный менеджер и другие полезные вещи. [GHC](http://www.haskell.org/ghc/) — это самый популярный способ работы с языком Haskell. Он включает в себя компилятор, REPL (интерпретатор), пакетный менеджер и другие полезные вещи.
## Cabal ## Cabal
@ -121,7 +121,7 @@ export PATH=$PATH:~/.cabal/bin:/opt/cabal/1.22/bin:/opt/ghc/7.8.4/bin:/opt/happy
*Опционально:* вы можете добавить также `.cabal-sandbox/bin` к вашему пути. *Опционально:* вы можете добавить также `.cabal-sandbox/bin` к вашему пути.
Код, который вы разрабатываете, будет доступен вам из командной строки. Код, который вы разрабатываете, будет доступен вам из командной строки.
Это работает только тогда, когда ваша текущая рабочая папка - песочница cabal. Это работает только тогда, когда ваша текущая рабочая папка — песочница cabal.
## Debian ## Debian
@ -210,7 +210,7 @@ PATH=$PATH:$HOME/.cabal/bin
alias cabal="$HOME/.cabal/bin/cabal" alias cabal="$HOME/.cabal/bin/cabal"
``` ```
Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки - `~/.bashrc`. Если вы используете Z-shell, то это `~/.zshrc`. Вы можете понять, какая оболочка у вас используется, запустив: Если вы не знаете, какая оболочка у вас используется, то скорее всего это Bash. Если это Bash, то файл, в который вам надо добавлять эти строки — `~/.bashrc`. Если вы используете Z-shell, то это `~/.zshrc`. Вы можете понять, какая оболочка у вас используется, запустив:
```bash ```bash
echo $SHELL | xargs basename echo $SHELL | xargs basename
@ -427,7 +427,7 @@ Writer, State) для себя, чтобы понять их лучше. Зат
- [Этот рассказ](https://vimeo.com/73648150) от Tony отлично мотивирует трансформеры монад - [Этот рассказ](https://vimeo.com/73648150) от Tony отлично мотивирует трансформеры монад
, [слайды](https://dl.dropboxusercontent.com/u/7810909/talks/monad-transformers/cbaa991e0eb49224eb286c1e418e2b9828e1fb21/monad-transformers.pdf). , [слайды](https://dl.dropboxusercontent.com/u/7810909/talks/monad-transformers/cbaa991e0eb49224eb286c1e418e2b9828e1fb21/monad-transformers.pdf).
Также, реализуйте `Control.Monad`. Функции типа `mapM` или `sequence` - хорошая Также, реализуйте `Control.Monad`. Функции типа `mapM` или `sequence` — хорошая
возможность попрактиковаться в написании общего кода монад. возможность попрактиковаться в написании общего кода монад.
Курс NICTA может быть использован как руководство для этого, он также включает написание Курс NICTA может быть использован как руководство для этого, он также включает написание
@ -462,7 +462,7 @@ Writer, State) для себя, чтобы понять их лучше. Зат
## Парсинг и генерация JSON ## Парсинг и генерация JSON
Aeson - это стандартное решение для парсинга [JSON](https://json.org) в Haskell. Aeson — это стандартное решение для парсинга [JSON](https://json.org) в Haskell.
Доступно из [hackage](https://hackage.haskell.org/package/aeson) и Доступно из [hackage](https://hackage.haskell.org/package/aeson) и
[github](https://github.com/bos/aeson). [github](https://github.com/bos/aeson).
@ -481,7 +481,7 @@ Aeson - это стандартное решение для парсинга [JS
- [Inductive graphs and Functional Graph Algorithms](http://web.engr.oregonstate.edu/~erwig/papers/abstracts.html#JFP01). - [Inductive graphs and Functional Graph Algorithms](http://web.engr.oregonstate.edu/~erwig/papers/abstracts.html#JFP01).
- [FGL/Haskell - A Functional Graph Library](http://web.engr.oregonstate.edu/~erwig/fgl/haskell/old/fgl0103.pdf). - [FGL/Haskell — A Functional Graph Library](http://web.engr.oregonstate.edu/~erwig/fgl/haskell/old/fgl0103.pdf).
- [Data.Graph source from Containers package](http://hackage.haskell.org/package/containers-0.5.5.1/docs/Data-Graph.html). - [Data.Graph source from Containers package](http://hackage.haskell.org/package/containers-0.5.5.1/docs/Data-Graph.html).
@ -620,21 +620,21 @@ cabal haddock --hoogle --hyperlink-source \
Мы обладаем огромными богатствами! Есть три основных вещи, которые я рекомендую: Мы обладаем огромными богатствами! Есть три основных вещи, которые я рекомендую:
* [Haste](http://haste-lang.org/) компилятор Haskell в JavaScript * [Haste](http://haste-lang.org/) компилятор Haskell в JavaScript
- [Компилятор](https://github.com/valderman/haste-compiler) на github.  — [Компилятор](https://github.com/valderman/haste-compiler) на github.
- Отличное  — Отличное
[демо](http://www.airpair.com/haskell/posts/haskell-tutorial-introduction-to-web-apps) [демо](http://www.airpair.com/haskell/posts/haskell-tutorial-introduction-to-web-apps)
Haste с примером проекта. Haste с примером проекта.
* [GHCJS](https://github.com/ghcjs/ghcjs) * [GHCJS](https://github.com/ghcjs/ghcjs)
- [GHCJS Introduction](http://weblog.luite.com/wordpress/?p=14)  — [GHCJS Introduction](http://weblog.luite.com/wordpress/?p=14)
- [Functional Reactive Web Interfaces with GHCJS and Sodium](http://weblog.luite.com/wordpress/?p=127)  — [Functional Reactive Web Interfaces with GHCJS and Sodium](http://weblog.luite.com/wordpress/?p=127)
- [Writing Atom plugins in Haskell using ghcjs ](http://edsko.net/2015/02/14/atom-haskell/)  — [Writing Atom plugins in Haskell using ghcjs ](http://edsko.net/2015/02/14/atom-haskell/)
* [PureScript](http://www.purescript.org/) * [PureScript](http://www.purescript.org/)
- Не совсем Haskell как Haste или GHCJS, но популярный выбор многих пользователей Haskell  — Не совсем Haskell как Haste или GHCJS, но популярный выбор многих пользователей Haskell
- Написан и вдохновлен языком Haskell  — Написан и вдохновлен языком Haskell
- Попробуйте purescript в вашем браузере [здесь](http://try.purescript.org/)  — Попробуйте purescript в вашем браузере [здесь](http://try.purescript.org/)
- Отличное руководство для [начала](http://www.christopherbiscardi.com/2014/06/22/getting-started-with-purescript/)  — Отличное руководство для [начала](http://www.christopherbiscardi.com/2014/06/22/getting-started-with-purescript/)
## Какой фронтенд язык мне использовать? ## Какой фронтенд язык мне использовать?
@ -706,10 +706,9 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [An introduction to recursion schemes](http://patrickthomson.ghost.io/an-introduction-to-recursion-schemes/) - [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) - - [Don't fear the cat](http://fho.f12n.de/posts/2014-05-07-dont-fear-the-cat.html) — хорошая демонстрация того, как hylomorphism, это композиция из cata и ana.
Хорошая демонстрация того, как 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) - [Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire](http://eprints.eemcs.utwente.nl/7281/01/db-utwente-40501F46.pdf)