• Simon Marlow. Parallel and Concurrent Programming in Haskell.
• Edward Z. Yang. Блог о Haskell в картинках. Много полезной информации о лени и устройстве ghc.
http://blog.ezyang.com/about/
• Oleg Kiselyov. Блог в том числе и о Haskell. Много решений интересных и нетривиальных задач. http:
//okmij.org/ftp/
Как работает GHC
• Документация GHC:
http://hackage.haskell.org/trac/ghc/wiki/Commentary
• Don Stewart. Multi-paradigm Just-In-Time Compilation. BS Thesis, 2002.
Автор пробует компилировать Haskell-код в Java-код. При этом очень доступно объясняеются внутрен-
ности STG.
• Simon Marlow, Simon Peyton Jones. The Glasgow Haskell Compiler. The Architecture of Open Source
Application, Volume 2, 2012.
• Simon Marlow, Simon Peyton Jones. Making a Fast Curry: Push/Enter vs. Eval/Apply for Higher-order
Languages. ICFP’04.
• Simon Peyton Jones. Implementing lazy functional languages on stock hardware: the Spineless Tagless G-
machine.
• Simon Marlow, Tim Harris, Roshan P. James, Simon Peyton Jones. Parallel Generational-Copying Garbage
Collection with a Block-Structured Heap. ISMM’08.
• Simon Peyton Jones, Andre Santos. A transformation-based optimizer for Haskell. Science of computer
programming, 1998.
322 | Приложения
• Simon Peyton Jones, John Launchbury. Unboxed values as first citizens in a non-strict functional programming
language. 1991.
• Simon Marlow, Simon Peyton Jones. Secrets of Glasgow Haskell Compiler inliner. 1999
Статья о тонкостях реализации прагмы INLINE.
• Simon Peyton Jones, Andrew Tolmach, Tony Hoare. Playing by the Rules, ICFP 2001
Статья о прагме RULES.
Встроенные проблемно-ориентированные языки (EDSL)
• Oleg Kiselyov. Implementing Explicit and Finding Implicit Sharing in EDSLs.
Чистое решение проблемы поиска дублирующих подвыражений.
• Andy Gill. Type-Safe Observable Sharing in Haskell.
Решение проблемы поиска дублирующих подвыражений с помощью расширения GHC, позволяющего
проводить сравнение термов по указателям.
• Conal Elliott, Sigbjorn Finne, Oege de Moor. Compiling Embedded Languages.
Отчёт о построении EDSL для анимации.
• Bruno C.d.S. Oliveira, Andres Loh. Abstract Syntax Graphs for Domain Specific Languages.
Применение графов для кодирования дублирующих подвыражений в EDSL.
• Jacques Carette, Oleg Kiselyov and Chung-chieh Shan. Finally Tagless, Partially Evaluated. Tagless Staged
Interpreters for Simpler Typed Languages.
Построение расширяемого синтаксиса с помощью классов типов.
• Wouter Sweistra. Data types a la carte.
Построение расширяемых типов. В этой статье и выше под словом “расширяемый” понимается возмож-
ность добавления к типу новых конструкторов без перекомпиляции старых.
И все-все-все
Если вдруг у вас возникли вопросы по Haskell, и рядом с вами не оказалось того, кто мог бы на них
ответить, и в книгах нет ответа, вы можете спросить у сообщества Haskell, в haskell-cafe, там вам быстро и с
радостью ответят:
http://www.haskell.org/mailman/listinfo/haskell-cafe
Сообщество Haskell славится радушием и терпимостью к начинающим. Там много информации о выпус-
ках новых библиотек, конференциях, обучающих программах и просто разговоры о том-о-сём.
Также стоит отметить журнал Monad.Reader:
http://themonadreader.wordpress.com/
Литература | 323
Обзор Hackage
Число пакетов, загруженных на Hackage, уже перевалило за 2000. В Hackage легко заблудиться. Очень
часто не разберёшься какой из пакетов выбрать. К тому же многие из них заброшены или просто не подходят
для использования в серьёзных приложениях. Но среди них есть и очень хорошие пакеты. Некоторые из них
включены в Haskell Platform. Ниже приведён тематический обзор наиболее популярных пакетов.
Стандартные библиотеки
Все приведённые в этом подразделе библиотеки включены в Haskell Platform.
Полный список библиотек для Haskell Platform можно посмотреть на сайте http://lambda.haskell.
org/hp-tmp/docs.
• Начало-всех-начал: base
Библиотека включает в себя все стандартные определения, например модули Prelude, Data.List,
Control.Monad и многие другие.
• Стандартные монады: transformers, mtl
Включает монады State, Writer, Reader и другие.
• Контейнеры: containers
Ассоциативные массивы, множества, последовательности, деревья.
• Массивы: array
• Графы: fgl
• Архиваторы: zlib
• Вычисление по значению: deepseq
Обычная функция seq, позволяет привести данное выражение к слабой заголовочной нормальной фор-
ме, если нам всё же необходимо вычислить значение полностью, мы можем воспользоваться функцией
deepseq из одноимённой библиотеки.
• Параллельное программирование: stm и parallel
• Временная арифметика, календарь: time
• Парсинг: parsec
• Регулярные выражения: regex-base, regex-posix
• Построение структурированного текста: pretty
• Тестирование программ: HUnit, QuickCheck
• Управление файловой системой: directory
• Работа с путями к файлам/директориям: filepath
• Сетевые библиотеки: network, HTTP, cgi.