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

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

Каркас. Типы и классы

Ленивое программирование

Пятнашки

Цикл игры

Приведём код в порядок

Формат запросов

Последние штрихи

Правила игры

Упражнения

Лямбда-исчисление

Лямбда исчисление без типов

Составление термов

Абстракция

Редукция. Вычисление термов

Рекурсия. Комбинатор неподвижной точки

Кодирование структур данных

Конструктивная математика

Расширение лямбда исчисления

Комбинаторная логика

Связь с лямбда-исчислением

Немного истории

Лямбда-исчисление с типами

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

Упражнения

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

Категория

Функтор

Естественное преобразование

Монады

Категория Клейсли

Дуальность

Начальный и конечный объекты

Начальный объект

Конечный объект

Сумма и произведение

Экспонента

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

Упражнения

Категориальные типы

Программирование в стиле оригами

Индуктивные и коиндуктивные типы

Существование начальных и конечных объектов

Гиломорфизм

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

Упражнения

Дополнительные возможности

Пуд сахара

Сахар для списков

Сахар для монад, do-нотация

Расширения

Обобщённые алгебраические типы данных

Семейства типов

Классы с несколькими типами

Экземпляры классов для синонимов

Функциональные зависимости

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

Полиморфизм высших порядков

Лексически связанные типы

И другие удобства и украшения

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

Упражнения

Средства разработки

Пакеты

Создание пакетов

Создаём библиотеки

Создаём исполняемые программы

Установка пакета

Удаление библиотеки

Репозиторий пакетов Hackage

Дополнительные атрибуты пакета

Установка библиотек для профилирования

Создание документации с помощью Haddock

Комментарии к определениям

Комментарии к модулю

Структура страницы документации

Разметка

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

Упражнения

Ориентируемся по карте

Алгоритм эвристического поиска А*

Поиск маршрутов в метро

Тестирование с помощью QuickCheck

Формирование тестовой выборки

Классификация тестовых случаев

Оценка быстродействия с помощью criterion

Основные типы criterion

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

Упражнения

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

Основные библиотеки

Изменяемые значения

OpenGL

Chipmunk

Боремся с IO

Определяемся с типами

Структура проекта

Детализируем функции обновления состояния игры

Детализируем дальше

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

Упражнения

Музыкальный пример

Музыкальная нотация

Нотная запись в европейской традиции

Протокол midi

Музыкальная запись в виде событий

Преобразование событий во времени

Композиция треков

Экземпляры стандартных классов

Ноты в midi

Синонимы для нот

Перевод в midi

Пример

Эффективное представление музыкальной нотации

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

Упражнения

Приложения

Начало работы с Haskell

Литература

Книги

Тематический сборник

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

Обзор Hackage

Стандартные библиотеки

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

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

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

Места

Университеты

Компании