• Парсинг: parsec
• Регулярные выражения: regex -base, regex -posix
• Построение структурированного текста: pretty
• Тестирование программ: HUnit, QuickCheck
• Управление файловой системой: directory
• Работа с путями к файлам/директориям: filepath
• Сетевые библиотеки: network, HTTP, cgi.
• 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-слётов, поддержкой стандартных библиотек.
Читать дальше