Учитель Начальной – Курс Хаскель от джуна до мидла (страница 1)
Учитель Начальной
Курс Хаскель от джуна до мидла
ГЛАВА 1. ВВЕДЕНИЕ В HASKELL И ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
1.1. Что такое Haskell и зачем он нужен
Haskell — это чисто функциональный язык программирования с сильной статической типизацией, ленивыми вычислениями и мощной системой типов. Он был создан в конце 1980-х — начале 1990-х годов группой исследователей как стандартный язык для исследований в области функционального программирования. Назван в честь математика Хаскелла Брукса Карри.
Основные особенности Haskell:
• Чистота (purity). Функции не имеют побочных эффектов. Одна и та же функция с одними и теми же аргументами всегда возвращает один и тот же результат.
• Ленивые вычисления (lazy evaluation). Выражения вычисляются только тогда, когда их значение действительно нужно.
• Сильная статическая типизация с выводом типов (type inference). Компилятор сам выводит большинство типов.
• Алгебраические типы данных и паттерн-матчинг.
• Мощная система типов, включая type classes, higher-kinded types, GADTs и т.д.
• Отсутствие изменяемого состояния по умолчанию (immutable by default).
Зачем изучать Haskell в 2020–2020-х годах?
1. Понимание функционального программирования на глубоком уровне.
2. Улучшение качества кода даже в других языках (Java, C#, Python, JavaScript, Rust, Scala).
3. Работа с современными системами, где Haskell используется: финансы (Standard Chartered, Barclays), блокчейн (Cardano), компиляторы, анализ данных, DevOps-инструменты.
4. Развитие мышления: Haskell заставляет думать о данных и трансформациях, а не о последовательности команд.
5. Высокая надёжность программ благодаря системе типов.
1.2. Императивное vs Функциональное мышление
Императивный подход (C, Java, Python в классическом стиле):
"Сделай шаг 1, потом шаг 2, измени переменную x, потом проверь условие..."
Функциональный подход:
"Опиши, что есть результат, через композицию чистых функций".
Пример. Подсчёт суммы квадратов чётных чисел в списке.
Императивно (псевдокод):
sum = 0
for x in list:
if x % 2 == 0:
sum = sum + x * x
Функционально на Haskell:
sumOfSquaresOfEvens = sum . map (^2) . filter even
Или более явно:
sumOfSquaresOfEvens xs = sum (map (^2) (filter even xs))
Здесь каждая функция делает одну вещь, и они комбинируются.
1.3. Основные концепции, которые нужно усвоить с самого начала
• Значение (value) и выражение (expression).
• Функция как значение первого класса.
• Рекурсия вместо циклов.
• Неизменяемость данных.
• Типы как контракты.
• Композиция функций.
1.4. Краткая история и экосистема
• 1987–1990: разработка языка.
• 1990: первый отчёт (Haskell 1.0).
• 1998: Haskell 98 (стандарт на долгие годы).
• 2010: Haskell 2010.
• Сегодня: GHC (Glasgow Haskell Compiler) — основной компилятор, постоянно развивается (GHC 9.x).
• Cabal и Stack — системы сборки.
• Hackage — центральный репозиторий пакетов.
• Stackage — стабильные наборы пакетов.
1.5. Кому подходит этот курс
Курс рассчитан на тех, кто:
• уже умеет программировать хотя бы на одном языке (Python, JavaScript, Java, C++ и т.д.);
• хочет перейти от junior-уровня понимания FP к уверенному middle-уровню;
• готов писать много кода и разбирать ошибки компилятора.
Если вы совсем новичок в программировании — сначала освойте основы любого императивного языка, потом возвращайтесь.
1.6. Как работать с этой книгой
1. Читайте главу.
2. Набирайте все примеры в GHCi или в файле.
3. Модифицируйте примеры.
4. Выполняйте упражнения.
5. Не бойтесь ошибок компилятора — это ваш лучший учитель.
1.7. Первые полезные ресурсы
• Официальный сайт: haskell.org
• Книга "Learn You a Haskell for Great Good!" (есть русский перевод).
• "Haskell Programming from First Principles" (платная, очень глубокая).