@ -33,7 +33,7 @@ IRC канал `#haskell-beginners` на Freenode.
### Политика сообщества
[Смотрите пост про обучение от Криса Дона ](http://chrisdone.com/posts/teaching )
[Смотрите пост про обучение от Криса Дона ](http://chrisdone.com/posts/teaching ).
Будьте дружелюбны и вежливы. Грубость и хамство испугает собеседника
и оттолкнет от участия в общении.
@ -234,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 ).
@ -249,7 +249,7 @@ $ cabal install alex happy
## Пользователям других Linux дистрибутивов
Скачайте последние бинарники cabal и ghc :
Скачайте последние бинарники Cabal и GHC :
- [GHC ](http://www.haskell.org/ghc/ ).
@ -312,7 +312,7 @@ $ cabal install cabal-install alex happy
cs240h доступен [онлайн ](http://www.scs.stanford.edu/14sp-cs240h/ ).
Это онлайн курс от [Bryan O ' Sullivan](https://github.com/bos ), который он преподает в Стенфорде.
Это онлайн курс от [Bryan O ’ Sullivan](https://github.com/bos ), который он преподает в Стенфорде.
Если вы не знаете кто он такой, взгляните на половину библиотек,
от которых зависят все приложения на Haskell, и вы увидите е г о имя в их авторах.
Если вы уже закончили курс Yorgey, о с о б о г о внимания в этом курсе заслуживают разделы о фантомных типах, контроле потоков информации, расширениях языка, конкурентном выполнении, pipes и линзах.
@ -357,7 +357,7 @@ cs240h доступен [онлайн](http://www.scs.stanford.edu/14sp-cs240h/)
- [Oh my laziness! ](http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html )
- SO вопрос '[Does haskell have laziness?]( http://stackoverflow.com/questions/13042353/does-haskell-have-tail-recursive-optimization)'
- Вопрос на Stack Overflow — [Does haskell have laziness? ]( http://stackoverflow.com/questions/13042353/does-haskell-have-tail-recursive-optimization )
- Слайды [Johan Tibell ](https://github.com/tibbe ) из доклада
[reasoning about laziness ](http://www.slideshare.net/tibbe/reasoning-about-laziness ).
@ -392,7 +392,7 @@ let a = 1 * a -- not guarded, (*) is strict
Перевод:
<!-- TODO: I don 't really understand this, so I can' t translate properly -->
<!-- TODO: I don ’ t really understand this, so I can’ t translate properly -->
> Интересное замечание: GHC должен скрывать отображение токена статуса поздаи
> абстрактного типа IO, потому что токен статуса должен все время быть использован
> линейно (не быть дуплицирован или сброшен), но система типов не может принудительно
@ -404,9 +404,9 @@ let a = 1 * a -- not guarded, (*) is strict
> Interesting side note: GHC needs to hide the state token representation behind
> an abstract IO type because the state token must always be used linearly (not
> duplicated or dropped), but the type system can' t enforce this. Clean, another
> duplicated or dropped), but the type system can’ t enforce this. Clean, another
> lazy Haskell-like language, has uniqueness types (which are like linear types
> and possibly different in ways I' m not aware of), and they expose the
> and possibly different in ways I’ m not aware of), and they expose the
> World-passing directly and provide a (non-abstract) IO monad only for
> convenience.
@ -418,13 +418,12 @@ let a = 1 * a -- not guarded, (*) is strict
Writer, State) для себя, чтобы понять их лучше. Затем, может быть, напишите
монадный интерпретатор для маленького языка выражений используя документ
[Monad Transformers Step by Step ](http://catamorph.de/documents/Transformers.pdf )
(упомянут в 'трансформеры монад' ниже).
(упомянут в «трансформеры монад» ниже).
Написание многих интерпретаторов просто изменяя монаду для изменения семантики
может помочь лучше понять, что происходит.
- [Этот рассказ ](https://vimeo.com/73648150 ) от Tony отлично мотивирует трансформеры монад
, [слайды ](https://dl.dropboxusercontent.com/u/7810909/talks/monad-transformers/cbaa991e0eb49224eb286c1e418e2b9828e1fb21/monad-transformers.pdf ).
- [Этот рассказ ](https://vimeo.com/73648150 ) от Tony отлично мотивирует трансформеры монад, [слайды ](https://dl.dropboxusercontent.com/u/7810909/talks/monad-transformers/cbaa991e0eb49224eb286c1e418e2b9828e1fb21/monad-transformers.pdf ).
Также, реализуйте `Control.Monad` . Функции типа `mapM` или `sequence` — хорошая
возможность попрактиковаться в написании общего кода монад.
@ -446,7 +445,7 @@ Writer, State) для себя, чтобы понять их лучше. Зат
# Тестирование, тесты, спеки, generative/property тестирование
- Это [руководство ](https://github.com/kazu-yamamoto/unit-test-example/blob/master/markdown/en/tutorial.md ) от Kazu Yamamoto – просто фа нта с тичecко е .
- Это [руководство ](https://github.com/kazu-yamamoto/unit-test-example/blob/master/markdown/en/tutorial.md ) от Kazu Yamamoto — просто фа нта с тичecко е .
- [Simple-Conduit ](https://github.com/jwiegley/simple-conduit ): Хорошая простая
библиотека для изучения, как работает стриминг IO в целом, знания, применимые также
@ -498,11 +497,11 @@ Aeson — это стандартное решение для парсинга
## Emacs
- [Alejandro Serras ' s tutorial](https://github.com/serras/emacs-haskell-tutorial/blob/master/tutorial.md )
- [Alejandro Serras ’ s tutorial](https://github.com/serras/emacs-haskell-tutorial/blob/master/tutorial.md )
- [My dotfiles ](https://github.com/bitemyapp/dotfiles/ )
- [Chris Done ' s emacs config](https://github.com/chrisdone/chrisdone-emacs )
- [Chris Done ’ s emacs config](https://github.com/chrisdone/chrisdone-emacs )
## Vim
@ -526,7 +525,7 @@ Aeson — это стандартное решение для парсинга
Cabal Hell был проблемой для пользователей Haskell до появления песочниц (sandboxes).
Установка вне песочницы происходит в вашу пользовательскую базу данных пакетов.
Это *не очень* хорошая идея, за исключением основных пакетов, таких как Cabal. alex и happy.
Это *не очень* хорошая идея, за исключением основных пакетов, таких как Cabal, alex и happy.
Более ничто не должно быть установлено глобально или в пользовательскую базу данных пакетов,
если вы не уверены в том, что делаете.
@ -616,21 +615,21 @@ cabal haddock --hoogle --hyperlink-source \
Мы обладаем огромными богатствами! Есть три основных вещи, которые я рекомендую:
* [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 )
Haste с примером проекта.
* [GHCJS ](https://github.com/ghcjs/ghcjs )
— [GHCJS Introduction ](http://weblog.luite.com/wordpress/?p=14 )
— [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/ )
- [GHCJS Introduction ](http://weblog.luite.com/wordpress/?p=14 )
- [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/ )
* [PureScript ](http://www.purescript.org/ )
— Н е совсем Haskell как Haste или GHCJS, но популярный выбор многих пользователей Haskell
— Написан и вдохновлен языком Haskell
— Попробуйте [PureScript ](http://try.purescript.org/ ) в вашем браузере
— Отличное руководство для [начала ](http://www.christopherbiscardi.com/2014/06/22/getting-started-with-purescript/ )
- Н е совсем Haskell как Haste или GHCJS, но популярный выбор многих пользователей Haskell
- Написан и вдохновлен языком Haskell
- Попробуйте [PureScript ](http://try.purescript.org/ ) в вашем браузере
- Отличное руководство для [начала ](http://www.christopherbiscardi.com/2014/06/22/getting-started-with-purescript/ )
## Какой фронтенд язык мне использовать?
@ -648,15 +647,15 @@ GHCJS и Haste интегрируются лучше с инструментам
# Для более глубокого понимания laziness, NF, WHNF
- [Notes on lambda calculus ](https://vec.io/posts/notes-on-lambda-calculus ).
- [Notes on lambda calculus ](https://vec.io/posts/notes-on-lambda-calculus )
## Исследовательские документы про lazy lambda calculi
- [A call by need lambda calculus ](http://homepages.inf.ed.ac.uk/wadler/topics/call-by-need.html#need-journal ).
- [A call by need lambda calculus ](http://homepages.inf.ed.ac.uk/wadler/topics/call-by-need.html#need-journal )
- [Demonstrating Lambda Calculus Reduction ](http://www.itu.dk/~sestoft/papers/sestoft-lamreduce.pdf )
- [The lazy lambda calculus ](http://www.cs.ox.ac.uk/files/293/lazy.pdf ).
- [The lazy lambda calculus ](http://www.cs.ox.ac.uk/files/293/lazy.pdf )
- [Lazy evaluation of Haskell ](http://www.vex.net/~trebla/haskell/lazy.xhtml )
@ -668,7 +667,7 @@ GHCJS и Haste интегрируются лучше с инструментам
- Хорошее [руководство ](http://kukuruku.co/hub/haskell/haskell-testing-a-multithread-application )
по тестированию и инкрементальной разработке многопоточного приложения в Haskell.
- [Functional Reactive Programming ](http://www.haskell.org/haskellwiki/Functional_Reactive_Programming )
- [Functional Reactive Programming ](http://www.haskell.org/haskellwiki/Functional_Reactive_Programming ).
# Линзы и призмы
@ -702,7 +701,7 @@ 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/ ) — это
руководство просто замечательно!
@ -715,15 +714,15 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [Write Haskell as Fast as C ](write_haskell_as_fast_as_c.md )
- [GHC Wiki: CoreSyn Type ](https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/CoreSynType ).
- [GHC Wiki: CoreSyn Type ](https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/CoreSynType )
- [Hackage: GHC Core ](https://hackage.haskell.org/package/ghc-core ).
- [Hackage: GHC Core ](https://hackage.haskell.org/package/ghc-core )
- [SO Question: Reading GHC Core ](http://stackoverflow.com/questions/6121146/reading-ghc-core ).
- [SO Question: Reading GHC Core ](http://stackoverflow.com/questions/6121146/reading-ghc-core )
- [Haskell as fast as C ](http://donsbot.wordpress.com/2008/06/04/haskell-as-fast-as-c-working-at-a-high-altitude-for-low-level-performance/ ).
- [Haskell as fast as C ](http://donsbot.wordpress.com/2008/06/04/haskell-as-fast-as-c-working-at-a-high-altitude-for-low-level-performance/ )
- [Real World Haskell, Chapter 25: Profiling and Optimizations ](http://book.realworldhaskell.org/read/profiling-and-optimization.html ).
- [Real World Haskell, Chapter 25: Profiling and Optimizations ](http://book.realworldhaskell.org/read/profiling-and-optimization.html )
# Тип и теория категорий
@ -731,14 +730,14 @@ catamorphisms). Знание о том, как реализовать unfold (an
Если вы хотите вникнуть в типы и теорию категорий:
- [Catster ' s Guide](http://byorgey.wordpress.com/2014/01/14/catsters-guide/ ) и
[Catster ' s Guide 2](http://byorgey.wordpress.com/catsters-guide-2/ )
- [Catster ’ s Guide](http://byorgey.wordpress.com/2014/01/14/catsters-guide/ ) и
[Catster ’ s Guide 2](http://byorgey.wordpress.com/catsters-guide-2/ ).
- [Вики-книга haskell ](http://en.wikibooks.org/wiki/Haskell/Category_theory )
содержит неплохие диаграмы
содержит неплохие диаграмы.
- [Category Theory ](http://www.haskell.org/haskellwiki/Category_theory )
на haskellwiki, также содержит хорошие ссылки
на haskellwiki, также содержит хорошие ссылки.
- [Categories from scratch ](http://science.raphael.poss.name/categories-from-scratch.html ), содержит несколько практических примеров.
@ -751,7 +750,7 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [Awodey ](http://ukcatalogue.oup.com/product/9780199237180.do ) и
[MacLane ](http://www.amazon.com/Categories-Working-Mathematician-Graduate-Mathematics/dp/0387984038 ). Стандартные книги про теорию категорий.
- [Harper ' s Practical Foundations for Programming Languages](http://www.cs.cmu.edu/~rwh/plbook/book.pdf )
- [Harper ’ s Practical Foundations for Programming Languages](http://www.cs.cmu.edu/~rwh/plbook/book.pdf )
лучшее PL интро к теории типов, которое я читал.
- [Type theory and Functional Programming ](http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ ).
@ -766,7 +765,7 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [Making ad-hoc polymorphism less ad-hoc ](http://swizec.com/blog/week-20-making-ad-hoc-polymorphism-less-ad-hoc/swizec/6564 ).
- [Theorems for Free! ](http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf ).
- [Theorems for Free! ](http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf )
## Initial and Final, DSLs, Finally Tagless
@ -782,36 +781,36 @@ catamorphisms). Знание о том, как реализовать unfold (an
- [Typed Tagless Final Interpreters ](http://okmij.org/ftp/tagless-final/course/lecture.pdf ).
- [The dog that didn ' t bark](http://existentialtype.wordpress.com/2011/03/21/the-dog-that-didnt-bark/ ) less specifically relevant but interesting.
- [The dog that didn ’ t bark](http://existentialtype.wordpress.com/2011/03/21/the-dog-that-didnt-bark/ ) less specifically relevant but interesting.
## Comonads
- [Comonads in Haskell ](https://speakerdeck.com/dmoverton/comonads-in-haskell ).
- [Comonads in Haskell ](https://speakerdeck.com/dmoverton/comonads-in-haskell )
- [SO question: Can a Monad be a Comonad ](http://stackoverflow.com/questions/16551734/can-a-monad-be-a-comonad ).
- [SO question: Can a Monad be a Comonad ](http://stackoverflow.com/questions/16551734/can-a-monad-be-a-comonad )
## Yoneda / CoYoneda
- [SO question: Step-by-step explanation of coyoneda ](http://stackoverflow.com/questions/24000465/step-by-step-deep-explain-the-power-of-coyoneda-preferably-in-scala-throu ).
- Свободные монады для Less, серия из трех публикаций от Edward Kmett
* [Part 1: Codensity ](http://comonad.com/reader/2011/free-monads-for-less/ ).
* [Part 2: Yoneda ](http://comonad.com/reader/2011/free-monads-for-less-2/ ).
* [Part 3: Yielding IO ](http://comonad.com/reader/2011/free-monads-for-less-3/ ).
* [Part 1: Codensity ](http://comonad.com/reader/2011/free-monads-for-less/ )
* [Part 2: Yoneda ](http://comonad.com/reader/2011/free-monads-for-less-2/ )
* [Part 3: Yielding IO ](http://comonad.com/reader/2011/free-monads-for-less-3/ )
## Propositions vs. Judgments (computation)
- [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
- [Lightweight Dependent-type Programming ](http://okmij.org/ftp/Computation/lightweight-dependent-typing.html ).
- [Lightweight Dependent-type Programming ](http://okmij.org/ftp/Computation/lightweight-dependent-typing.html )
- [Idris programming language ](http://www.idris-lang.org/ ).
- [Idris programming language ](http://www.idris-lang.org/ )
# Statically linking binaries