Языки программирования

Учебник Haskell для начинающих

23 урока · 6 разделов · бесплатно, без регистрации

Полный курс по Haskell — языку чистого функционального программирования. Разбираем чистоту и неизменяемость, систему типов и классы типов, ленивые вычисления, функции высшего порядка и композицию, а затем спокойно и без страха объясняем монады и ввод-вывод. Много схем, понятных аналогий и запускаемых врезок на Python, которые показывают функциональные идеи в знакомом языке.

Курс «Haskell: функциональное программирование» состоит из 6 разделов и 23 уроков: Основы: чистота, GHCi, первая программа, Функции и сопоставление с образцом, Типы и классы типов, Списки и ленивость, Функции высшего порядка и композиция и Монады и IO: что дальше. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Основы: чистота, GHCi, первая программа

    1. Зачем Haskell и что значит «чистый»

      Что такое Haskell, чем чистое функциональное программирование отличается от привычного и почему это полезно.

    2. GHC, GHCi и первый запуск

      Знакомство с GHC 9.x, интерактивной оболочкой GHCi и тем, как пробовать выражения вживую.

    3. Выражения, значения и неизменяемость

      Почему в Haskell всё — выражение, что такое неизменяемые значения и как обходиться без присваивания.

  2. 2 Функции и сопоставление с образцом

    1. Определение функций и карринг

      Как объявляются функции в Haskell, что такое каррирование и почему все функции принимают один аргумент.

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

      Pattern matching: как разбирать данные по форме, сопоставлять конструкторы и писать ясные функции без вложенных if.

    3. Рекурсия вместо циклов

      Почему в Haskell нет циклов, как мыслить рекурсивно, базовый и рекурсивный случай, аккумуляторы.

    4. Лямбды и операторы как функции

      Анонимные функции (лямбды), операторы как обычные функции, секции и инфиксная запись.

  3. 3 Типы и классы типов

    1. Система типов и сигнатуры

      Зачем нужна статическая типизация, как читать сигнатуры с :: и -> и почему типы — это документация.

    2. Свои типы данных: data

      Объявление собственных типов через data, конструкторы, перечисления и типы-произведения.

    3. Классы типов: Eq, Ord, Show

      Что такое классы типов, как работают Eq, Ord, Show, Num и зачем нужен полиморфизм по ограничениям.

    4. Параметрический полиморфизм

      Обобщённые типы с переменными типа, дженерики Haskell и почему id :: a -> a работает для всего.

  4. 4 Списки и ленивость

    1. Списки и их устройство

      Как устроены списки в Haskell, операторы : и ++, конструирование и разбор, основные функции.

    2. Генераторы списков

      List comprehensions: компактное построение списков с условиями и преобразованиями в духе математики.

    3. Ленивые вычисления

      Что такое ленивость, отложенные вычисления (thunks) и почему Haskell считает только то, что реально нужно.

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

    1. map, filter и преобразование данных

      Функции высшего порядка map и filter: применение функции к каждому элементу и отбор по условию.

    2. Свёртки: foldr и foldl

      Свёртки fold: как свести список к одному значению, foldr против foldl, обобщение суммы и произведения.

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

      Оператор композиции (.), соединение функций в конвейер и применение через ($).

    4. Point-free стиль и читаемость

      Бесточечный стиль: запись функций без явных аргументов, когда он помогает и когда вредит читаемости.

  6. 6 Монады и IO: что дальше

    1. Maybe: безопасность без исключений

      Тип Maybe для значений, которых может не быть: Just и Nothing вместо null и исключений.

    2. Either и обработка ошибок

      Тип Either для результата с описанием ошибки: Left для проблемы, Right для успеха.

    3. Что такое монада на самом деле

      Монада без академизма: конвейер вычислений с контекстом, оператор >>= и интуиция «и затем».

    4. Монада IO и ввод-вывод

      Как Haskell делает ввод-вывод, оставаясь чистым: тип IO, do-блоки, putStrLn и getLine.

    5. Куда двигаться дальше

      Обзор экосистемы Haskell 2024-2025: cabal и stack, ключевые библиотеки, ресурсы и план развития.