Открыть меню
683
286
3
15 тыс.
Wiki - Факультет компьютерных наук
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

Haskell 26

Материал из Wiki - Факультет компьютерных наук

Промышленное программирование на 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

  1. Установка компилятора, системы сборки, языкового сервера
    • (Рекомендованный способ) Через ghcup:
      1. Скачайте бинарный файл сами либо введите одну любимую команду:
        • 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: Команда доступна по ссылке.
      2. Убедитесь, что путь до места установки ghcup (скорее всего, ~/.ghcup/bin либо C:/ghcup) содержится в $PATH — запустите ghcup list. При необходимости добавьте этот путь сами.
      3. Установите recommended версии компилятора, системы сборки и языкового сервера:
        1. ghcup install ghc recommended
        2. ghcup install stack recommended
        3. ghcup install hls recommended
      4. Создайте символические ссылки на установленные версии программ:
        1. ghcup set ghc recommended
        2. ghcup set stack recommended
        3. ghcup set hls recommended
    • (Если предыдущий вариант не сработал) Windows:
      1. choco install haskell-language-server haskell-stack
      2. refreshenv
  2. Настройте LSP client в своей любимой среде разработки:
    • Для VS Code есть плагин. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через chocolatey, выбирайте вторую опцию; иначе сначала попробуйте через GHCup.
    • В NeoVim настройте nvim-lspconfig, он знает про HLS.
    • Инструкцию для других сред можно найти здесь.
  3. (Опционально) Установите Hoogle локально:
    1. stack install hoogle
    2. Теперь можно пользоваться 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 баллов.

Проект

В качестве проекта предлагается доработать одно из домашних заданий следующим образом:

  • Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (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