Haskell 24 — различия между версиями
TurtlePU (обсуждение | вклад) (Новая страница: «== Промышленное программирование на Haskell, часть 1 == Весенний курс по выбору для студентов…») |
Drubin (обсуждение | вклад) (Перенос дз1) |
||
(не показано 7 промежуточных версии 2 участников) | |||
Строка 17: | Строка 17: | ||
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy | Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy | ||
− | Материалы курса: | + | Материалы курса: https://github.com/Haskell-HSE |
− | Записи лекций и семинаров: | + | Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q |
Таблица с оценками: TBD | Таблица с оценками: TBD | ||
Строка 75: | Строка 75: | ||
=== Лекции, семинары === | === Лекции, семинары === | ||
+ | |||
+ | * '''Лекция 05.02'''. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись]. | ||
+ | * '''Семинар 07.02'''. Не состоялся. | ||
+ | * '''Лекция 12.02'''. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-12T13-19-29Z.mp4 Запись]. | ||
+ | * '''Семинар 14.02'''. Классы типов. Моноиды. Foldable. Map. [https://github.com/ilyakooo0/production-haskell/tree/dd8560938a15da072a1e1c17b1a80cb9d22e1920/seminars/1 Материалы]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Семинар%2014.02.mkv Запись]. | ||
+ | * '''Лекция 19.02'''. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-19.mp4 Запись]. | ||
+ | * '''Семинар 21.02'''. TBA. [ Материалы]. [ Запись]. | ||
+ | * '''Лекция 26.02'''. TBA. [ Конспект]. [ Запись]. | ||
+ | * '''Семинар 28.02'''. TBA. [ Материалы]. [ Запись]. | ||
+ | * '''Лекция 04.03'''. TBA. [ Конспект]. [ Запись]. | ||
+ | * '''Семинар 06.03'''. TBA. [ Материалы]. [ Запись]. | ||
+ | * '''Лекция 11.03'''. TBA. [ Конспект]. [ Запись]. | ||
+ | * '''Семинар 13.03'''. TBA. [ Материалы]. [ Запись]. | ||
+ | * '''Лекция 18.03'''. TBA. [ Конспект]. [ Запись]. | ||
+ | * '''Семинар 20.03'''. TBA. [ Материалы]. [ Запись]. | ||
=== Домашние задания === | === Домашние задания === | ||
Строка 80: | Строка 95: | ||
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов. | Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов. | ||
− | + | * [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн '''11 марта (пн) в 23:59'''. | |
+ | * [ Домашнее задание 2]. Дедлайн '''TBA'''. | ||
+ | * [ Домашнее задание 3]. Дедлайн '''TBA'''. | ||
=== Проект === | === Проект === |
Текущая версия на 21:11, 10 марта 2024
Содержание
Промышленное программирование на Haskell, часть 1
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.
Команда курса
Лектор: Павел Соколов aka @TurtlePU.
Семинарист: Илья Костюченко aka @ilyakooo0.
Ассистент: Даниил Рубин aka @supremeSwings.
Ссылки
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy
Материалы курса: https://github.com/Haskell-HSE
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q
Таблица с оценками: TBD
Setting up
- Если вы пользуетесь Windows, установите WSL2, если ещё не.
-
Установите 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 Powershell (cringe): Команда доступна по ссылке
- MacOS:
- Убедитесь, что путь до места установки
ghcup
содержится в$PATH
— запуститеghcup list
. -
Установите
recommended
версии компилятора, системы сборки и языкового сервера:ghcup install ghc recommended ghcup install stack recommended ghcup install hls recommended
- Убедитесь, что путь
~/.ghcup/bin
содержится в$PATH
. При необходимости добавьте этот путь сами. -
Создайте символические ссылки на установленные версии программ:
ghcup set ghc recommended ghcup set stack recommended ghcup set hls recommended
-
Настройте LSP client в своей любимой среде разработки:
- Для VS Code есть плагин. Настройка: TBD
- В NeoVim настройте nvim-lspconfig, он знает про HLS.
- Инструкцию для других сред можно найти здесь.
- Опционально — установите Hoogle локально:
cabal install hoogle
-
Допишите в файл
~/.ghci
следующее::def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\"" :def hdoc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""
- Теперь можно пользоваться Hoogle прямо из ghci с помощью команд
:hoogle
и:hdoc
План курса
Лекции, семинары
- Лекция 05.02. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. Конспект. [ Запись].
- Семинар 07.02. Не состоялся.
- Лекция 12.02. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. Запись.
- Семинар 14.02. Классы типов. Моноиды. Foldable. Map. Материалы. Запись.
- Лекция 19.02. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. Запись.
- Семинар 21.02. TBA. [ Материалы]. [ Запись].
- Лекция 26.02. TBA. [ Конспект]. [ Запись].
- Семинар 28.02. TBA. [ Материалы]. [ Запись].
- Лекция 04.03. TBA. [ Конспект]. [ Запись].
- Семинар 06.03. TBA. [ Материалы]. [ Запись].
- Лекция 11.03. TBA. [ Конспект]. [ Запись].
- Семинар 13.03. TBA. [ Материалы]. [ Запись].
- Лекция 18.03. TBA. [ Конспект]. [ Запись].
- Семинар 20.03. TBA. [ Материалы]. [ Запись].
Домашние задания
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
- Домашнее задание 1. Дедлайн 11 марта (пн) в 23:59.
- [ Домашнее задание 2]. Дедлайн TBA.
- [ Домашнее задание 3]. Дедлайн TBA.
Проект
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:
- Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);
- Покрыть код тестами (2 балла из 10);
- Не использовать
unsafe
, если это не было обговорено заранее (2 балла из 10); - Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);
- Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):
- предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;
- предпочитать point-free стиль, где это разумно;
- предпочитать пользоваться подсказками HLint;
- код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;
- если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же.
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) в полночь перед защитой. Либо можно оформить сдачу в виде пулл-реквеста.
Защита проекта проводится во время весенней сессии.
Оценивание
Итог = Округление(min(10, 0.64 * ДЗ + 0.36 * ПР)),
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.
Округление арифметическое.
Дополнительная литература
- Will Kurt – Get Programming with Haskell
- Bryan O'Sullivan, Don Stewart, John Goerzen – Real World Haskell
- Alexander Granin – Functional Design and Architecture
- Sandy Maguire – Algebra-Driven Design