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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Новая страница: «== Промышленное программирование на Haskell == Весенний курс по выбору для студентов 4 курса…»)
 
(Домашние задания)
 
(не показаны 22 промежуточные версии этого же участника)
Строка 17: Строка 17:
 
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy
 
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy
  
Материалы курса: https://github.com/Haskell-HSE
+
Конспекты лекций: https://github.com/Haskell-HSE/haskell-lectures-2025
  
Записи лекций и семинаров: TBD
+
Материалы семинаров: https://github.com/ilyakooo0/production-haskell
  
Таблица с оценками: TBD
+
Записи лекций и семинаров: https://disk.yandex.ru/d/IoakBXz_6yygPw/%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://docs.google.com/spreadsheets/d/19wFHBrf5e5x-5vtSdfq70tZAIMHW1bAy4kJki5TqWN4/edit?usp=sharing
  
 
== Setting up ==
 
== Setting up ==
  
<ol>
+
# Установка компилятора, системы сборки, языкового сервера
  <li> Установка компилятора, системы сборки, языкового сервера
+
#* (Рекомендованный способ) Через [https://www.haskell.org/ghcup/ ghcup]:
  <ul>
+
#*# Скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами либо введите одну любимую команду:
    <li> Установите [https://www.haskell.org/ghcup/ ghcup] &mdash; скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами
+
#*#* '''MacOS''': <code>brew install ghcup</code>
    либо введите одну любимую команду:
+
#*#* '''Arch'''-based distros: <code>yay -S ghcup-hs-bin</code>
    <ul>
+
#*#* '''WSL2''', '''MacOS''' >= 10.13, '''Linux''': <code>curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh</code>
      <li> '''MacOS''': <pre>brew install ghcup</pre></li>
+
#*#* '''Windows''': Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке].
      <li> '''Arch'''-based distros: <pre>yay -S ghcup-hs-bin</pre></li>
+
#*# Убедитесь, что путь до места установки <code>ghcup</code> (скорее всего, <code>~/.ghcup/bin</code> либо <code>C:/ghcup</code>) содержится в <code>$PATH</code> &mdash; запустите <code>ghcup list</code>. При необходимости добавьте этот путь сами.
      <li> '''WSL2''', '''MacOS''' >= 10.13, '''Linux''': <pre>curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh</pre></li>
+
#*# Установите '''<code style="background-color:black;color:rgb(0,255,0)">recommended</code>''' версии компилятора, системы сборки и языкового сервера:
      <li> '''Windows''': Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]</li>
+
#*## <code>ghcup install ghc recommended</code>
    </ul>
+
#*## <code>ghcup install stack recommended</code>
    </li>
+
#*## <code>ghcup install hls recommended</code>
  <li>Убедитесь, что путь до места установки <code>ghcup</code> содержится в <code>$PATH</code> &mdash; запустите <code>ghcup list</code>.</li>
+
#*# Создайте символические ссылки на установленные версии программ:
  <li>
+
#*## <code>ghcup set ghc recommended</code>
    Установите '''<code style="background-color:black;color:rgb(0,255,0)">recommended</code>''' версии компилятора, системы сборки и языкового сервера:<pre>
+
#*## <code>ghcup set stack recommended</code>
ghcup install ghc recommended
+
#*## <code>ghcup set hls recommended</code>
ghcup install stack recommended
+
#* (Если предыдущий вариант не сработал) '''Windows''':
ghcup install hls recommended</pre>
+
#*# <code>choco install haskell-language-server haskell-stack</code>
  </li>
+
#*# <code>refreshenv</code>
  <li>Убедитесь, что путь <code>~/.ghcup/bin</code> содержится в <code>$PATH</code>. При необходимости добавьте этот путь сами.</li>
+
# Настройте LSP client в своей любимой среде разработки:
  <li>
+
#* Для '''VS Code''' есть [https://github.com/haskell/vscode-haskell плагин]. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через <code>chocolatey</code>, выбирайте вторую опцию; иначе сначала попробуйте через GHCup.
    Создайте символические ссылки на установленные версии программ:<pre>
+
#* В '''NeoVim''' настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.
ghcup set ghc recommended
+
#* Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].
ghcup set stack recommended
+
# (Опционально) Установите [https://hoogle.haskell.org Hoogle] локально:
ghcup set hls recommended</pre>
+
## <code>stack install hoogle</code>
  </li>
+
## Теперь можно пользоваться Hoogle прямо из ghci с помощью команды <code>:!hoogle</code> и <code>:!hoogle --info</code>
  </li>
+
  <li> (Если предыдущий вариант не сработал) '''Windows''': <pre>choco install haskell-language-server haskell-stack && refreshenv</pre></li>
+
  </ul>
+
  </li>
+
  <li>
+
    Настройте LSP client в своей любимой среде разработки:
+
    <ul>
+
      <li>Для '''VS Code''' есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD</li>
+
      <li>В '''NeoVim''' настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.</li>
+
      <li>Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].</li>
+
    </ul>
+
  </li>
+
  <li>Опционально &mdash; установите [https://hoogle.haskell.org Hoogle] локально:
+
    <ol>
+
      <li><code>cabal install hoogle</code></li>
+
      <li>
+
        Допишите в файл <code>~/.ghci</code> следующее:<pre>
+
:def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\""
+
:def hdoc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""</pre>
+
      </li>
+
      <li>Теперь можно пользоваться Hoogle прямо из ghci с помощью команд <code>:hoogle</code> и <code>:hdoc</code></li>
+
    </ol>
+
  </li>
+
</ol>
+
  
 
== План курса ==
 
== План курса ==
Строка 80: Строка 58:
 
=== Лекции, семинары ===
 
=== Лекции, семинары ===
  
* '''Лекция I''' (14 янв). Где и почему используют Haskell? Синтаксис. Ленивые вычисления. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].
+
* '''Лекция I''' (14 янв). Где и почему используют Haskell? Синтаксис. Ленивые вычисления. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L1_Intro.md Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-01-14T09-57-14Z.mp4 Запись].
* '''Семинар I''' (15 янв). ???. [ Материалы]. [ Запись].
+
* '''Семинар I''' (15 янв). Stack. Типы данных. [https://github.com/ilyakooo0/production-haskell/tree/f7a77e80fd059a0d5b181cb7f020bb04859ac0bf/seminars/1 Материалы]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%202025-01-15T08-03-06Z%20(2).mp4 Запись].
* '''Лекция II''' (21 янв). TBA. [ Конспект]. [ Запись].
+
* '''Лекция II''' (21 янв). Сравнение с образцом. Композиция. Классы типов Eq, Ord, Num, Read, Show. Основы работы с IO. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L1_Intro.md Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-01-21T10-05-23Z%20(1).mp4 Запись].
* '''Семинар II''' (22 янв). TBA. [ Материалы]. [ Запись].
+
* '''Семинар II''' (22 янв). Сбалансированные деревья. [https://github.com/ilyakooo0/production-haskell/tree/f7a77e80fd059a0d5b181cb7f020bb04859ac0bf/seminars/1 Материалы]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%202025-01-22T08-12-26Z%20(2).mp4 Запись].
* '''Лекция III''' (28 янв). TBA. [ Конспект]. [ Запись].
+
* '''Лекция III''' (28 янв). Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L2_Laws.md Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-01-28T09-59-42Z.mp4 Запись].
* '''Семинар III''' (29 янв). TBA. [ Материалы]. [ Запись].
+
* '''Семинар III''' (29 янв). Практика с моноидами. [https://github.com/ilyakooo0/production-haskell/tree/f7a77e80fd059a0d5b181cb7f020bb04859ac0bf/seminars/2 Материалы]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%202025-01-29T08-09-45Z%20(2).mp4 Запись].
* '''Лекция IV''' (04 фев). TBA. [ Конспект]. [ Запись].
+
* '''Лекция IV''' (04 фев). Важнейшие примеры монад: Identity, Maybe, Either, State, IO. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L04_Monads.hs Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-02-04T09-58-25Z.mp4 Запись].
* '''Семинар IV''' (05 фев). TBA. [ Материалы]. [ Запись].
+
* '''Семинар IV''' (05 фев). Тестирование, основанное на свойствах. Консультация к ДЗ-1. [ Материалы]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%202025-02-05T08-09-52Z%20(2).mp4 Запись].
* '''Лекция V''' (11 фев). TBA. [ Конспект]. [ Запись].
+
* '''Лекция V''' (11 фев). Парсинг как сайд-эффект. Комбинаторы парсеров. Классы Alternative и MonadPlus. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L05_Parsers.hs Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-02-11T10-00-44Z.mp4 Запись].
* '''Семинар V''' (12 фев). TBA. [ Материалы]. [ Запись].
+
* '''Семинар V''' (12 фев). Генераторы случайных чисел. Консультация к ДЗ-1. [ Материалы]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%202025-02-12T08-08-49Z%20(2).mp4 Запись].
* '''Лекция VI''' (18 фев). TBA. [ Конспект]. [ Запись].
+
* '''Лекция VI''' (18 фев). Композиция (аппликативных) функторов. Трансформеры монад. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L06_Transformers.hs Конспект]. [https://disk.yandex.ru/d/IoakBXz_6yygPw/%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/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%202025-02-18T10-00-14Z.mp4 Запись].
 
* '''Семинар VI''' (19 фев). TBA. [ Материалы]. [ Запись].
 
* '''Семинар VI''' (19 фев). TBA. [ Материалы]. [ Запись].
* '''Лекция VII''' (25 фев). TBA. [ Конспект]. [ Запись].
+
* '''Лекция VII''' (25 фев). Классы монад. Монада Free. Параметричность. [https://github.com/Haskell-HSE/haskell-lectures-2025/blob/main/src/L07_Parametricity.hs Конспект]. [ Запись].
 
* '''Семинар VII''' (26 фев). TBA. [ Материалы]. [ Запись].
 
* '''Семинар VII''' (26 фев). TBA. [ Материалы]. [ Запись].
 
* '''Лекция VIII''' (04 мар). TBA. [ Конспект]. [ Запись].
 
* '''Лекция VIII''' (04 мар). TBA. [ Конспект]. [ Запись].
Строка 105: Строка 83:
 
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
 
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
  
* [ Домашнее задание 1]. Дедлайн '''TBA'''.
+
* [https://classroom.github.com/classrooms/156670441-enterprise-programming-in-haskell-2025/assignments/haskell-basics Домашнее задание 1]. Дедлайн '''21 февраля в 23:59'''.
* [ Домашнее задание 2]. Дедлайн '''TBA'''.
+
* '''Домашнее задание 2''' снимается. ''ОДЗ-2=max(ОДЗ-3, ОДЗ-4)''.
* [ Домашнее задание 3]. Дедлайн '''TBA'''.
+
* [https://classroom.github.com/a/K-qtPRYu Домашнее задание 3]. Дедлайн '''16 марта в 23:59'''.
* [ Домашнее задание 4]. Дедлайн '''TBA'''.
+
* [https://classroom.github.com/a/eTQ7otGb Домашнее задание 4]. Дедлайн '''23 марта в 23:59'''.
  
 
=== Проект ===
 
=== Проект ===

Текущая версия на 05:21, 6 марта 2025

Промышленное программирование на Haskell

Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.

Команда курса

Лектор: Павел Соколов aka @TurtlePU.

Семинарист: Илья Костюченко aka @ilyakooo0.

Ассистенты: Ислам Талипов aka @lishy2 и Глеб Смирнов aka @liferooter.

Ссылки

Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy

Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy

Конспекты лекций: https://github.com/Haskell-HSE/haskell-lectures-2025

Материалы семинаров: https://github.com/ilyakooo0/production-haskell

Записи лекций и семинаров: https://disk.yandex.ru/d/IoakBXz_6yygPw/%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://docs.google.com/spreadsheets/d/19wFHBrf5e5x-5vtSdfq70tZAIMHW1bAy4kJki5TqWN4/edit?usp=sharing

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 (14 янв). Где и почему используют Haskell? Синтаксис. Ленивые вычисления. Конспект. Запись.
  • Семинар I (15 янв). Stack. Типы данных. Материалы. Запись.
  • Лекция II (21 янв). Сравнение с образцом. Композиция. Классы типов Eq, Ord, Num, Read, Show. Основы работы с IO. Конспект. Запись.
  • Семинар II (22 янв). Сбалансированные деревья. Материалы. Запись.
  • Лекция III (28 янв). Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Конспект. Запись.
  • Семинар III (29 янв). Практика с моноидами. Материалы. Запись.
  • Лекция IV (04 фев). Важнейшие примеры монад: Identity, Maybe, Either, State, IO. Конспект. Запись.
  • Семинар IV (05 фев). Тестирование, основанное на свойствах. Консультация к ДЗ-1. [ Материалы]. Запись.
  • Лекция V (11 фев). Парсинг как сайд-эффект. Комбинаторы парсеров. Классы Alternative и MonadPlus. Конспект. Запись.
  • Семинар V (12 фев). Генераторы случайных чисел. Консультация к ДЗ-1. [ Материалы]. Запись.
  • Лекция VI (18 фев). Композиция (аппликативных) функторов. Трансформеры монад. Конспект. Запись.
  • Семинар VI (19 фев). TBA. [ Материалы]. [ Запись].
  • Лекция VII (25 фев). Классы монад. Монада Free. Параметричность. Конспект. [ Запись].
  • Семинар VII (26 фев). TBA. [ Материалы]. [ Запись].
  • Лекция VIII (04 мар). TBA. [ Конспект]. [ Запись].
  • Семинар VIII (05 мар). TBA. [ Материалы]. [ Запись].
  • Лекция IX (11 мар). TBA. [ Конспект]. [ Запись].
  • Семинар IX (12 мар). TBA. [ Материалы]. [ Запись].
  • Лекция X (18 мар). TBA. [ Конспект]. [ Запись].
  • Семинар X (19 мар). TBA. [ Материалы]. [ Запись].

Домашние задания

Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.

Проект

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

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