- Парадигмы программирования
- Объектно-ориентированное программирование
- Архитектура фон Неймана
- Абстрактные типы данных
- Функциональное программирование
- Объекты первого класса
- Модель подстановки
- Побочные эффекты
- Чистота функций
- Ссылочная прозрачность
- Стратегии вычислений
- Отличия ФП от императивного
- Преимущества и недостатки ФП
- Основные римитивные типы
- Объявление значений
- Основные операторы
- Объявление функций
- Применение функций
- Вывод в консоль
- Кортежи
- Функциональные типы
- Каррирование
- Опциональный тип
- Списки
- Условное выражение
- Рекурсия
- Сопоставление с образцом
- Лямбда-выражения
- Функции высших порядков
- Операторы для работы с функциями
- Преобразования типов
- Ввод с консоли
- Объявления типов
- Алгебраические типы данных
- Сопоставление с образцом
- Полиморфные типы
- Рекурсивные типы
- Примеры алгебраических типов
- Ленивые вычисления
- Ленивые последовательности
- Корекурсия
- Хвостовая рекурсия
- Вычисления с продолжениями
- Активные шаблоны
- Правая свертка
- Левая свертка
- Бесконечные свертки
- Обратные свертки
- Функции reduce
- Сканирование
- Развертки
- Классы
- Вычислительные выражения
- Последовательные вычисления
- Реализация последовательных вычислений
- Асинхронность
- Инверсия управления
- Реализация асинхронных вычислений
- Язык Haskell
- Комментарии
- Литералы
- Базовые типы
- Числовые типы
- Типы чисел с плавающей точкой
- Объявления констант
- Операторы
- Объявление и применение функций
- Объявление собственных операторов
- Приоритет и ассоциативность операторов
- Сечения операторов
- Кортежи
- Пары
- Условное выражение
- Рекурсия
- Прерывание программы
- Сопоставление с образцом
- Guard expressions
- Выражение case..of
- Хвостовая рекурсия
- Выражение let..in
- Конструкция where
- Импорты
- Экспорты
- Числовые типы
- Логический тип
- Символьный и строковый тип
- Тип Ordering
- Параметрический полиморфизм
- Специальный полиморфизм
- Вывод типов
- Функции высших порядков
- Лямбда-абстракции
- Полиморфизм кортежей
- Полиморфизм списков
- Классы типов
- Экземпляры классов типов
- Контексты
- Полиморфные экземпляры
- Расширения классов типов
- Класс типов Enum
- Класс типов Bounded
- Класс типов Show
- Класс типов Read
- Числовые классы типов
- Алгебраические типы данных
- Derived instances
- Работа с типами данных
- Типы данных с метками полей
- Обертки над типами
- Типы с параметрами
- Тип данных Maybe
- Тип данных Either
- Инфиксные конструкторы данных
- Кайнды
- Ленивая стратегия вычислений
- Слабая головная нормальная форма
- Форсирование вычислений
- Строгий оператор применения
- Неопровержимый образец
- Флаги строгости
- Бесконечные списки
- Арифметические последовательности
- List Comprehension
- Правая свертка
- Левая свертка
- Строгие свертки
- Свертки без начального значения
- Сканирование
- Развертки
- Полугруппы
- Стандартные полугруппы
- Моноиды
- Стандартные моноиды
- Моноид First
- Функции fold и foldMap
- Сумма и произведение
- Минимум и максимум
- Класс типов Foldable
- Эндоморфизмы
- Реализация правой свертки через foldMap
- Дуальные моноиды
- Реализация левой свертки через foldMap
- Законы для Foldable-типов
- Специальные свертки
- Стандартные Foldable-типы
- Свертки деревьев
- Функторы
- Законы для функторов
- Библиотечные функторы
- Аппликативные функторы
- Библиотечные аппликативные функторы
- Законы для аппликативных функторов
- Аппликативный функтор Maybe
- Аппликативный функтор Either
- Пары как аппликативные функторы
- Функции как аппликативные функторы
- Списки как аппликативные функторы
- Функция liftA2
- Усеченный справа оператор аппликации
- Усеченный слева оператор аппликации
- Класс типов Alternative
- Законы для Alternative
- Maybe как Alternative
- Список как Alternative
- Функция asum
- Функция sequenceA_
- Функция traverse_
- Ограниченность Foldable-типов
- Класс типов Traversable
- Maybe как Traversable-контейнеры
- Either как Traversable-контейнеры
- Пары как Traversable-контейнеры
- Списки как Traversable-контейнеры
- Типы Identity и Compose
- Законы для Traversable: Identity
- Законы для Traversable: Composition
- Другие законы для Traversable
- Монады
- Оператор монадического связывания
- Класс типов Monad
- Стрелка Клейсли
- One-way монады
- Законы для монад
- Класс типов MonadPlus
- Законы для MonadPlus
- Монада Identity
- Монада Maybe
- do-нотация
- Монада Either
- Пример использования Either
- Монада списка
- Пример использования монады списка
- Функции для работы с монадами
- Монада State
- Функции для работы с состояниями
- Пример использование State
- Монада Reader
- Преобразование Reader к State
- Функции для работы с окружением
- Пример использования Reader
- Монада Writer
- Преобразование Writer к State
- Функции для работы с логом
- Пример использования Writer
- Монада IO
- Сопоставление с образцом в do-нотации
- Класс типов MonadFail
- Экземпляры MonadFail
- Функция guard
- Комбинация эффектов
- Композиция на уровне типов
- Композиция функторов
- Композиция аппликативных функторов
- Композиция монад
- Трансформеры монад
- Конструктор ReaderT
- Функтор ReaderT
- Аппликативный функтор ReaderT
- Монада ReaderT
- Класс типов MonadTrans
- Трансформер ReaderT
- Трансформация Identity
- Монада Reader
- Конструктор WriterT
- Функтор WriterT
- Аппликативный функтор WriterT
- Монада WriterT
- Трансформер WriterT
- Монада Writer
- Конструктор StateT
- Функтор StateT
- Аппликативный функтор StateT
- Монада StateT
- Трансформер StateT
- Монада State
- Инстансы MonadFail
- Проблема лифтинга
- Мультипараметрические классы типов
- Функциональные зависимости
- Интерфейсы монад
- Класс типов MonadReader
- ReaderT как MonadReader
- WriterT как MonadReader
- Класс типов MonadWriter
- WriterT как MonadWriter
- ReaderT как MonadWriter
- Неявный лифтинг
- Трансформер ListT
- Трансформер монад как монада