Выбрать главу

• 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.