Haskell 26
Дополнительные действия
Промышленное программирование на Haskell
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.
Команда курса
Лектор: Павел Соколов aka @TurtlePU.
Семинарист: Илья Костюченко aka @ilyakooo0.
Ассистенты: Ислам Талипов aka @lishy2.
Ссылки
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy
Конспекты лекций: https://github.com/Haskell-HSE/haskell-lectures-2026
Записи лекций и семинаров: https://disk.yandex.ru/d/mzXlT0U3MzEZkQ/%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%20Haskell
Таблица с оценками за ДЗ: https://edu-build.iko.soy/dashboard
Таблица с итоговыми оценками: TBA
Setting up
- Установка компилятора, системы сборки, языкового сервера
- (Рекомендованный способ) Через ghcup:
- Скачайте бинарный файл сами либо введите одну любимую команду:
- MacOS:
brew install ghcup - Arch-based distros:
yay -S ghcup-hs-bin - WSL2, MacOS >= 10.13, Linux:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh - Windows: Команда доступна по ссылке.
- MacOS:
- Убедитесь, что путь до места установки
ghcup(скорее всего,~/.ghcup/binлибоC:/ghcup) содержится в$PATH— запуститеghcup list. При необходимости добавьте этот путь сами. - Установите
recommendedверсии компилятора, системы сборки и языкового сервера:ghcup install ghc recommendedghcup install stack recommendedghcup install hls recommended
- Создайте символические ссылки на установленные версии программ:
ghcup set ghc recommendedghcup set stack recommendedghcup set hls recommended
- Скачайте бинарный файл сами либо введите одну любимую команду:
- (Если предыдущий вариант не сработал) Windows:
choco install haskell-language-server haskell-stackrefreshenv
- (Рекомендованный способ) Через ghcup:
- Настройте LSP client в своей любимой среде разработки:
- Для VS Code есть плагин. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через
chocolatey, выбирайте вторую опцию; иначе сначала попробуйте через GHCup. - В NeoVim настройте nvim-lspconfig, он знает про HLS.
- Инструкцию для других сред можно найти здесь.
- Для VS Code есть плагин. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через
- (Опционально) Установите Hoogle локально:
stack install hoogle- Теперь можно пользоваться Hoogle прямо из ghci с помощью команды
:!hoogleи:!hoogle --info
План курса
Лекции, семинары
- Лекция I (21 янв). Где и почему используют Haskell? Функции и ленивые вычисления. Встроенные и алгебраические типы данных.
- Семинар I (21 янв). Stack. Типы данных.
- Лекция II (28 янв). Встроенные классы типов и моноиды. Типы высшего порядка и класс
Foldable. - Семинар II (28 янв). Практика с классами типов.
- Лекция III (4 фев). Библиотека
containers. Классы типовFunctor,Applicative,Traversable. - Семинар III (4 фев). Практика с изученными классами типов.
- Лекция IV (11 фев). Класс типов
Monadи его основные инстансы:Maybe,Either,IO,Reader,Writer,State. - Семинар IV (11 фев). Практика по пройденному материалу.
- Лекция V (18 фев). Монада
IO: публичный API и определение. Библиотекаrandom. Property based testing и библиотекаfalsify. - Семинар V (20 фев). Практика по пройденному материалу. Расширение
ApplicativeDo. КлассIsString. Пакетыtext,bytestringиoptparse-applicative. - Лекция VI (25 фев). Многопоточность и конкурентность в Haskell. Software Transactional Memory и библиотека
stm. - Семинар VI (25 фев). Практика по пройденному материалу.
- Лекция VII (4 мар). TBA.
- Семинар VII (4 мар). TBA.
- Лекция VIII (11 мар). TBA.
- Семинар VIII (11 мар). TBA.
- Лекция IX (18 мар). TBA.
- Семинар IX (18 мар). TBA.
- Лекция X (??? мар). TBA.
- Семинар X (??? мар). TBA.
Домашние задания
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 10 баллов.
- Домашнее задание 1. Дедлайн 2 февраля в 23:59.
- Домашнее задание 2. Дедлайн 9 февраля в 23:59.
- Домашнее задание 3. Дедлайн 16 февраля в 23:59.
- Домашнее задание 4. Дедлайн 24 февраля в 23:59.
- Домашнее задание 5. Дедлайн 7 марта в 23:59.
- [ Домашнее задание 6]. Дедлайн TBA.
- [ Домашнее задание 7]. Дедлайн TBA.
Проект
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:
- Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);
- Покрыть код тестами (2 балла из 10);
- Не использовать
unsafe, если это не было обговорено заранее (2 балла из 10); - Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);
- Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):
- предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;
- предпочитать point-free стиль, где это разумно;
- предпочитать пользоваться подсказками HLint;
- код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;
- если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же. Тема должна быть выбрана до 17 марта в 23:59.
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) в полночь перед защитой. Либо можно оформить сдачу в виде пулл-реквеста.
Защита проекта проводится во время весенней сессии.
Оценивание
Итог = Округление(min(10, 0.7 * ДЗ + 0.3 * ПР)),
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.
Округление арифметическое.
Литература
Основная литература
Дополнительная литература
- Sandy Maguire – Algebra-Driven Design
- Will Kurt – Get Programming with Haskell
- Bryan O'Sullivan, Don Stewart, John Goerzen – Real World Haskell