haskell-notes

http://www.lektorium.tv/course/?id=22797

• John Harrison. Introduction to Functional Programming.

Курс лекций по функциональному программированию, который читался в Университете Кэмбридж.

• А. Филд, П. Харрисон, Функциональное программирование, Москва “Мир”, 1993.

Большая книга для читателей, всерьёз заинтересовавшихся функциональным программированием.

Прочитав её, вы сможете не только пользоваться ФП-языками но и написать такой язык самостоя-

тельно.

• Rinus Plasmeijer and Marko van Eekelen. Functional Programming and Parallel Graph Rewriting.

В этой книге исследуются вопросы распараллеливания функциональных программ, построение ком-

пиляторов для функциональных языков.

Литература | 321

Теория категорий

Две очень хорошие книги для начинающих:

• Maarten M. Fokkinga. Gentle Introduction to Category Theory.

Также где-то в сети есть и перевод на русский.

• Steve Awodey. Category Theory.

• Eugenia Cheng, Simon Willerton aka TheCatsters. Курс видео-лекций на youtube.

http://www.scss.tcd.ie/Edsko.de.Vries/ct/catsters/linear.php

http://www.youtube.com/user/TheCatsters

Статьи по категориальным типам:

• Varmo Vene. Categorical Programming with Inductive and Coinductive Types. Phd-диссертация.

• Erik Meijer, Graham Hutton. Bananas in Space: Extending Fold and Unfold to Exponential Types.

• Martin Erwig. Categorical Programming with Abstract Data Types.

• Martin Erwig. Metamorphic Programming: Structured Recursion for Abstract Data Types.

Практика

• Conal Elliott. Denotational design with type class morphisms.

• Johan Tibell. High Performance Haskell. Слайды с выступления.

• Johan Tibel. Faster persistent data structures through hashing. Слайды с выступления.

• 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

Регулярные выражения: regexbase, regexposix

Построение структурированного текста: pretty

Тестирование программ: HUnit, QuickCheck

Управление файловой системой: directory

Работа с путями к файлам/директориям: filepath

Сетевые библиотеки: network, HTTP, cgi.

3д Графика: OpenGL, GLUT.

Монадные трансформеры: transformers

Мы не коснулись этой темы, но вот краткое пояснение: монадные трансформеры позволяют комбини-

ровать несколько монад. Например, если нам нужно использовать чтение-запись в файл совместно с

изменяемым состоянием.

324 | Приложения

Эффективные типы данных

Списки: dlist – эффективное объединение списков.

Если вы часто пользуетесь операцией ++, то необходимо заботиться о том, чтобы скобки всегда группи-

ровались вправо. Как в a++(b++(c++d)). Иначе время объединения из линейного превратится в квад-

Читай продолжение на следующей странице
Добавить комментарии