Haskell 24 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Лекции, семинары)
(Перенос дз1)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 19: Строка 19:
 
Материалы курса: https://github.com/Haskell-HSE
 
Материалы курса: https://github.com/Haskell-HSE
  
Записи лекций и семинаров: TBD
+
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q
  
 
Таблица с оценками: TBD
 
Таблица с оценками: TBD
Строка 77: Строка 77:
  
 
* '''Лекция 05.02'''. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].
 
* '''Лекция 05.02'''. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].
* '''Лекция 12.02'''. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [ Запись].
+
* '''Семинар 07.02'''. Не состоялся.
* '''Семинар 14.02'''. [ Материалы]. [ Запись].
+
* '''Лекция 12.02'''. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-12T13-19-29Z.mp4 Запись].
* '''Лекция 19.02'''. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [ Запись].
+
* '''Семинар 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. [ Материалы]. [ Запись].
  
 
=== Домашние задания ===
 
=== Домашние задания ===
Строка 85: Строка 95:
 
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
 
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
  
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн '''5 марта (вт) в 23:59'''.
+
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн '''11 марта (пн) в 23:59'''.
 
* [ Домашнее задание 2]. Дедлайн '''TBA'''.
 
* [ Домашнее задание 2]. Дедлайн '''TBA'''.
 
* [ Домашнее задание 3]. Дедлайн '''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

  1. Если вы пользуетесь Windows, установите WSL2, если ещё не.
  2. Установите 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): Команда доступна по ссылке
  3. Убедитесь, что путь до места установки ghcup содержится в $PATH — запустите ghcup list.
  4. Установите recommended версии компилятора, системы сборки и языкового сервера:
    ghcup install ghc recommended
    ghcup install stack recommended
    ghcup install hls recommended
  5. Убедитесь, что путь ~/.ghcup/bin содержится в $PATH. При необходимости добавьте этот путь сами.
  6. Создайте символические ссылки на установленные версии программ:
    ghcup set ghc recommended
    ghcup set stack recommended
    ghcup set hls recommended
  7. Настройте LSP client в своей любимой среде разработки:
    • Для VS Code есть плагин. Настройка: TBD
    • В NeoVim настройте nvim-lspconfig, он знает про HLS.
    • Инструкцию для других сред можно найти здесь.
  8. Опционально — установите Hoogle локально:
    1. cabal install hoogle
    2. Допишите в файл ~/.ghci следующее:
      :def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\""
      :def hdoc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""
    3. Теперь можно пользоваться 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