Программирование на языке Haskell
Haskell — это чистый функциональный язык программирования общего назначения.
В рамках этого курса Вы познакомитесь с его основами и научитесь создавать полноценные функциональные приложения!
Материалы курса
Данный курс состоит из видео-лекций, семинаров и семестрового практического задания.
Лекции
Все лекции доступны для просмотра на YouTube:
- Функции высшего порядка.
- Свойства полиморфных функций.
- Ленивые вычисления.
- Функции над списками. Свёртки.
- Алгебраические типы данных.
- Классы типов.
- Функторы.
- Моноиды.
- Моноидная свёртка.
- Аппликативные функторы.
Семинары
Материалы семинаров доступны в репозитории cmc-haskell-2018/seminars.
Практическое задание
Сроки этапов сдачи практического задания на Haskell:
- Базовая (общая) часть:
- 13 марта — основные типы и функции (только сигнатуры);
- 20 марта — реализация основных функций;
- 3 апреля — рабочее приложение.
- Индивидуальная часть:
- 17 апреля — основные типы и функции (только сигнатуры);
- 1 мая — завершённый функционал.
Методические указания и варианты доступны на странице практических заданий.
Оценка
Оценка по практикуму зависит от набранного за семестр суммарного количества баллов. Баллы начисляются за:
- работу в семестре на семинарах;
- выполнение практического задания на Haskell.
Все результаты будут внесены в таблицу Haskell 2018.
Haskell Platform
Для работы с Haskell в этом семестре рекомендуется установить Haskell Platform с официального сайта языка. На сайте есть инструкции по установке для каждой платформы (Linux, macOS, Windows). Haskell Platform содержит следующие инструменты:
- компилятор GHC (версии 8.2.2);
- система сборки Cabal;
- утилита Stack для разработки проектов;
- стандартные и часто-используемые библиотеки.
Интерпретатор GHCi
Для работы с небольшими программами рекомендуется использовать интерпретатор GHCi.
Чтобы запустить его наберите команду ghci
. Здесь вы можете определять функции, типы и играться с данными:
>>> type Offset = Float
>>> let offsets = [0, 200 ..]
>>> take 10 offsets
[0,200,400,600,800,1000,1200,1400,1600,1800]
>>> :t take
take :: Int -> [a] -> [a]
Чтобы загрузить типы и функции из файла, используйте команду :load
:
>>> :load /path/to/your/file.hs
Если вы работаете с проектом Stack, используйте stack ghci
из корня проекта, чтобы автоматически
подгрузить все модули этого проекта.
Например, для проекта demo-galaxies
:
cd demo-galaxies
stack ghci
>>> massCenter [Particle 1 (0, 0) (0, 0), Particle 2 (3, 3) (0, 0)]
(2.0,2.0)
Дополнительные материалы
Недостаточно материалов в курсе? Хочется знать больше? Ниже несколько источников знаний о Haskell, которые я рекомендую! (если есть такая возможность, читайте материалы на английском языке)
- Learn You a Haskell — это позитивно и понятно изложенный материал, начиная с самых основ и заканчивая введением в интересные вещи.
- Haskell Wikibook — нечто среднее между справочником и туториалом по языку Haskell. В книге содержатся статьи по базовым и продвинутым темам, включая структуры данных, теорию типов и статьи о производительности программ на Haskell.
- Haskell Weekly — еженедельная сводка новостей про то, что происходит в сообществе: здесь вы можете узнать о том, что нового происходит с языком, где он применяется, а также о ближайших событиях и даже вакансиях.
- ruHaskell.org — сайт русскоязычного сообщества Haskell.
- Functional pearls — некоторые исключительно элегантные функциональные решения различных практических проблем, с использованием Haskell.
Существует также несколько книг и учебников о Haskell (как на английском, так и на русском). Однако, по разным причинам, я не могу порекомендовать какую-либо из них.
Контакты
Вопросы по лекциям? Проблема с выполнением практического задания? Просто хочется обсудить Haskell или функциональное программирование? Пишите!
Общие группы:
- cmc-haskell-2018@googlegroups.com — список рассылки курса;
- Haskell 2018 — группа в Telegram;
- cmc-haskell-2018 — материалы курса и практические задания.
Контакты преподавателя: