diff --git a/guide-ru.md b/guide-ru.md index 56c1a51..02b9797 100644 --- a/guide-ru.md +++ b/guide-ru.md @@ -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 Перевод: - + > Интересное замечание: 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