haskell-notes

ратичное. Библиотека dlist предоставляет специальный тип списков, для которых не важно как груп-

пируются скобки при объединении. Время объединения всегда будет линейным.

Строки: bytestring

Если ваша программа загружена обработкой строк, и работает слишком медленно, рассмотрите вари-

ант перехода со стандартных строк на тип ByteString, это может увеличить быстродействие на поря-

док.

Текст: text или utf8string

Работа с текстом в формате Unicode. Часто проблемы возникают при необходимости обработки рус-

ского текста закодированного в Unicode. Для решения этой проблемы можно воспользоваться одной

из этих библиотек.

Двоичные данные: binary или cereal – Сериализация/десериализация данных.

Случайные числа: mersennerandompure64

Эффективный генератор случайных чисел.

Ввод-вывод: iteratee

Эффективная реализация ввода-вывода. Если вам нужно читать или писать данные из большого числа

файлов, эта библиотека может существенно помочь.

Контейнеры: unorderedcontainers

Альтернатива стандартной библиотеке containers. Эффективные типы Map и Set.

Последовательности: fingertree, seq

Используются для работы с очередями различного типа.

Массивы: vector

Эффективный тип для представления массивов. Замена стандартному типу Data.Array.

• Самые эффективные изменяемые хэш-таблицы: hashtables

Матрицы: hmatrix, repa

Разработка программ

• Тестирование, проверка инвариантов: QuickCheck

• Оценка быстродействия: criterion

• Просмотр Core в человеческом виде: ghccore

• Настройка сборки мусора: ghcgctune

• Трассировка программ: hat

И все-все-все

Парсинг: parsec или attoparsec

Языки разметки: pandoc, xhtml, tagsoup, blazehtml, 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, reactivebanana, yampa

Линейная алгебра: vectorspace, 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

Двумерный синтаксис

Краткое содержание

Упражнения

Первая программа

Интерпретатор

У-вей

Логические значения

Класс Show. Строки и символы

Строки и символы

Пример: Отображение дат и времени

Автоматический вывод экземпляров классов типов

Арифметика

Класс Eq. Сравнение на равенство

Класс Num. Сложение и умножение

Класс Fractional. Деление

Стандартные числа

Документация

Краткое содержание

Упражнения

Типы

Структура алгебраических типов данных

Структура констант

Несколько слов о теории графов

Строчная запись деревьев

Структура функций

Композиция и частичное применение

Декомпозиция и сопоставление с образцом

Проверка типов

Проверка типов с контекстом

Мы будем Вам очень признательны, если Вы оцените данную книгуили оставить свой отзыв на странице комментариев.

Ограничение мономорфизма

Рекурсивные типы

Краткое содержание

Упражнения

Декларативный и композиционный стиль

Локальные переменные

where-выражения

let-выражения

Декомпозиция

Сопоставление с образцом

case-выражения

Условные выражения

Охранные выражения

if-выражения

Определение функций

Уравнения

Безымянные функции

Какой стиль лучше?

Краткое содержание

Упражнения

Функции высшего порядка

Обобщённые функции

Функция тождества

Константная функция

Функция композиции

Аналогия с числами

Функция перестановки

Функция on

Функция применения

Приоритет инфиксных операций

Приоритет функции композиции

Приоритет функции применения

Функциональный калькулятор

Функции, возвращающие несколько значений

Комбинатор неподвижной точки

Краткое содержание

Основные функции высшего порядка

Приоритет инфиксных операций

Упражнения

Функторы и монады: теория

Композиция функций

Класс Category

Специальные функции

Взаимодействие с внешним миром

Три композиции

Обобщённая формулировка категории Клейсли

Примеры специальных функций

Частично определённые функции

Многозначные функции

Применение функций

Применение функций многих переменных

Несколько полезных функций

Функторы и монады

Функторы

Аппликативные функторы

Монады

Свойства классов

Полное определение классов

Исторические замечания

Краткое содержание

Упражнения

Функторы и монады: примеры

Случайные числа

Конечные автоматы

Отложенное вычисление выражений

Тип Map

Накопление результата

Тип-обёртка newtype

Записи

Накопление чисел

Накопление логических значений

Накопление списков

Монада изменяемых значений ST

Тип ST

Императивные циклы

Быстрая сортировка

Краткое содержание

Упражнения

IO

Чистота и побочные эффекты

Монада IO

Как пишутся программы

Типичные задачи IO

Вывод на экран

Ввод пользователя

Чтение и запись файлов

Ленивое и энергичное чтение файлов

Аргументы программы

Вызов других программ

Случайные значения

Исключения

Потоки текстовых данных

Форточка в мир побочных эффектов

Отладка программ

Композиция монад

Краткое содержание

Упражнения

Редукция выражений

Стратегии вычислений

Преимущества и недостатки стратегий

Вычисление по необходимости

Аннотации строгости

Принуждение к СЗНФ с помощью seq

Функции с хвостовой рекурсией

Тонкости применения seq

Энергичные образцы

Энергичные типы данных

Пример ленивых вычислений

Краткое содержание

Упражнения

Реализация Haskell в GHC

Этапы компиляции

Язык STG

Вычисление STG

Куча

Стек

Правила общие для обеих стратегий вычисления

Правила для стратегии вставка-вход

Правила для стратегии вычисление-применение

Представление значений в памяти. Оценка занимаемой памяти

Управление памятью. Сборщик мусора

Статистика выполнения программы

Статистика вычислителя

Профилирование функций

Поиск источников внезапной остановки

Оптимизация программ

Флаги оптимизации

Прагма INLINE

Прагма RULES

Прагма UNPACK

Краткое содержание

Упражнения

Ленивые чудеса

Численные методы

Дифференцирование

Интегрирование

Степенные ряды

Арифметика рядов

Производная и интеграл

Элементарные функции

Водосборы

Ленивее некуда

Краткое содержание

Упражнения

Структурная рекурсия

Свёртка

Логические значения

Натуральные числа

Maybe

Списки

Деревья

Развёртка

Списки

Потоки

Натуральные числа

Краткое содержание

Упражнения

Поиграем

Стратегия написания программ

Описание задачи

Набросок решения

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