• 3д Графика: OpenGL, GLUT.
• Монадные трансформеры: transformers
Мы не коснулись этой темы, но вот краткое пояснение: монадные трансформеры позволяют комбини-
ровать несколько монад. Например, если нам нужно использовать чтение-запись в файл совместно с
изменяемым состоянием.
324 | Приложения
Эффективные типы данных
• Списки: dlist – эффективное объединение списков.
Если вы часто пользуетесь операцией ++, то необходимо заботиться о том, чтобы скобки всегда группи-
ровались вправо. Как в a++(b++(c++d)). Иначе время объединения из линейного превратится в квад-
ратичное. Библиотека dlist предоставляет специальный тип списков, для которых не важно как груп-
пируются скобки при объединении. Время объединения всегда будет линейным.
• Строки: bytestring
Если ваша программа загружена обработкой строк, и работает слишком медленно, рассмотрите вари-
ант перехода со стандартных строк на тип ByteString, это может увеличить быстродействие на поря-
док.
• Текст: text или utf8-string
Работа с текстом в формате Unicode. Часто проблемы возникают при необходимости обработки рус-
ского текста закодированного в Unicode. Для решения этой проблемы можно воспользоваться одной
из этих библиотек.
• Двоичные данные: binary или cereal – Сериализация/десериализация данных.
• Случайные числа: mersenne-random-pure64
Эффективный генератор случайных чисел.
• Ввод-вывод: iteratee
Эффективная реализация ввода-вывода. Если вам нужно читать или писать данные из большого числа
файлов, эта библиотека может существенно помочь.
• Контейнеры: unordered-containers
Альтернатива стандартной библиотеке containers. Эффективные типы Map и Set.
• Последовательности: fingertree, seq
Используются для работы с очередями различного типа.
• Массивы: vector
Эффективный тип для представления массивов. Замена стандартному типу Data.Array.
• Самые эффективные изменяемые хэш-таблицы: hashtables
• Матрицы: hmatrix, repa
Разработка программ
• Тестирование, проверка инвариантов: QuickCheck
• Оценка быстродействия: criterion
• Просмотр Core в человеческом виде: ghc-core
• Настройка сборки мусора: ghc-gc-tune
• Трассировка программ: hat
И все-все-все
• Парсинг: parsec или attoparsec
• Языки разметки: pandoc, xhtml, tagsoup, blaze-html, html
• XML: xml, HaXml
• JSON: json, aeson
• Web: happstack, snap, yesod, hakyll
• Сетевые библиотеки: network, HTTP, cgi, curl
• Графика: diagrams, gnuplot, SDL
Обзор Hackage | 325
• 3д графика: OpenGL, GLFW, GLUT
• Базы данных: HDBC
• Встраиваемые приложения реального времени с жёсткими ограничениями: atom
• GUI: wxHaskell, gtk2hs
• Оценка производительности программ: criterion
• Статистика: statistics
• Парсинг и генерация кода Haskell: haskell-src-exts
• FRP: reactive, reactive-banana, yampa
• Линейная алгебра: vector-space, hmatrix
326 | Приложения
Места
Где культивируется Haskell?
Университеты
Посмотрим на университеты, в которых Haskell преподают, развивают и применяют:
• Британия: Эдинбург, Ноттингем, Оксфорд (лаборатория информатики), Глазго.
• Америка: Йельский, Коннектикут, Техас, Оклахома, Портлэнд, Канзас
• Нидерланды: Утрехт
• Швеция: Технологический Чалмерса, Гёттинген.
• Австралия: Новый Южный Уэльс, Западной Австралии
• и другие, полный список на http://www.haskell.org/haskellwiki/Haskell_in_education.
Компании
• Microsoft Research – разрабатывают GHC.
• Galios – ведут исследования и решают практические задачи на ФП-языках, особенно на Haskell.
• Well-Typed – решают практические задачи, консультируют и всё на Haskell. Также занимаются органи-
зацией Haskell-слётов, поддержкой стандартных библиотек.
• и другие, полный список на http://www.haskell.org/haskellwiki/Haskell_in_industry
Места | 327
Document Outline
Предисловие
Структура книги
Основные понятия
Благодарности
Основы
Общая картина
Типы
Значения
Классы типов
Контекст классов типов. Суперклассы
Экземпляры классов типов
Ядро Haskell
Двумерный синтаксис
Краткое содержание
Упражнения
Первая программа
Интерпретатор
У-вей
Логические значения