<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.cs.hse.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drubin</id>
	<title>Wiki - Факультет компьютерных наук - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cs.hse.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drubin"/>
	<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Drubin"/>
	<updated>2026-09-21T21:53:12Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=84129</id>
		<title>Haskell 24</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=84129"/>
		<updated>2024-03-10T18:11:58Z</updated>

		<summary type="html">&lt;p&gt;Drubin: Перенос дз1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Промышленное программирование на Haskell, часть 1 ==&lt;br /&gt;
&lt;br /&gt;
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.&lt;br /&gt;
&lt;br /&gt;
=== Команда курса ===&lt;br /&gt;
&lt;br /&gt;
Лектор: Павел Соколов aka [https://t.me/TurtlePU @TurtlePU].&lt;br /&gt;
&lt;br /&gt;
Семинарист: Илья Костюченко aka [https://t.me/ilyakooo0 @ilyakooo0].&lt;br /&gt;
&lt;br /&gt;
Ассистент: Даниил Рубин aka [https://t.me/supremeSwings @supremeSwings].&lt;br /&gt;
&lt;br /&gt;
=== Ссылки ===&lt;br /&gt;
&lt;br /&gt;
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy&lt;br /&gt;
&lt;br /&gt;
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy&lt;br /&gt;
&lt;br /&gt;
Материалы курса: https://github.com/Haskell-HSE&lt;br /&gt;
&lt;br /&gt;
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q&lt;br /&gt;
&lt;br /&gt;
Таблица с оценками: TBD&lt;br /&gt;
&lt;br /&gt;
== Setting up ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Если вы пользуетесь Windows, установите WSL2, если ещё не.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите [https://www.haskell.org/ghcup/ ghcup] &amp;amp;mdash; скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами&lt;br /&gt;
    либо введите одну любимую команду:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;MacOS&#039;&#039;&#039;: &amp;lt;pre&amp;gt;brew install ghcup&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Arch&#039;&#039;&#039;-based distros: &amp;lt;pre&amp;gt;yay -S ghcup-hs-bin&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;WSL2&#039;&#039;&#039;, &#039;&#039;&#039;MacOS&#039;&#039;&#039; &amp;gt;= 10.13, &#039;&#039;&#039;Linux&#039;&#039;&#039;: &amp;lt;pre&amp;gt;curl --proto &#039;=https&#039; --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Windows Powershell&#039;&#039;&#039; (cringe): Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь до места установки &amp;lt;code&amp;gt;ghcup&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &amp;amp;mdash; запустите &amp;lt;code&amp;gt;ghcup list&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите &#039;&#039;&#039;&amp;lt;code style=&amp;quot;background-color:black;color:rgb(0,255,0)&amp;quot;&amp;gt;recommended&amp;lt;/code&amp;gt;&#039;&#039;&#039; версии компилятора, системы сборки и языкового сервера:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup install ghc recommended&lt;br /&gt;
ghcup install stack recommended&lt;br /&gt;
ghcup install hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь &amp;lt;code&amp;gt;~/.ghcup/bin&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt;. При необходимости добавьте этот путь сами.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Создайте символические ссылки на установленные версии программ:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup set ghc recommended&lt;br /&gt;
ghcup set stack recommended&lt;br /&gt;
ghcup set hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Настройте LSP client в своей любимой среде разработки:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Для &#039;&#039;&#039;VS Code&#039;&#039;&#039; есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;В &#039;&#039;&#039;NeoVim&#039;&#039;&#039; настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Опционально &amp;amp;mdash; установите [https://hoogle.haskell.org Hoogle] локально:&lt;br /&gt;
    &amp;lt;ol&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;cabal install hoogle&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        Допишите в файл &amp;lt;code&amp;gt;~/.ghci&amp;lt;/code&amp;gt; следующее:&amp;lt;pre&amp;gt;&lt;br /&gt;
:def hoogle \x -&amp;gt; return $ &amp;quot;:!hoogle \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
:def hdoc \x -&amp;gt; return $ &amp;quot;:!hoogle --info \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Теперь можно пользоваться Hoogle прямо из ghci с помощью команд &amp;lt;code&amp;gt;:hoogle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;:hdoc&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== План курса ==&lt;br /&gt;
&lt;br /&gt;
=== Лекции, семинары ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Лекция 05.02&#039;&#039;&#039;. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 07.02&#039;&#039;&#039;. Не состоялся.&lt;br /&gt;
* &#039;&#039;&#039;Лекция 12.02&#039;&#039;&#039;. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-12T13-19-29Z.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 14.02&#039;&#039;&#039;. Классы типов. Моноиды. Foldable. Map. [https://github.com/ilyakooo0/production-haskell/tree/dd8560938a15da072a1e1c17b1a80cb9d22e1920/seminars/1 Материалы]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Семинар%2014.02.mkv Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 19.02&#039;&#039;&#039;. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-19.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 21.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 26.02&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 28.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 04.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 06.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 11.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 13.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 18.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 20.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
&lt;br /&gt;
=== Домашние задания ===&lt;br /&gt;
&lt;br /&gt;
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.&lt;br /&gt;
&lt;br /&gt;
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн &#039;&#039;&#039;11 марта (пн) в 23:59&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 2]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 3]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Проект ===&lt;br /&gt;
&lt;br /&gt;
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Покрыть код тестами (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Не использовать &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;, если это не было обговорено заранее (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать point-free стиль, где это разумно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать пользоваться подсказками HLint;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же.&lt;br /&gt;
&lt;br /&gt;
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) &#039;&#039;&#039;в полночь перед защитой&#039;&#039;&#039;. Либо можно оформить сдачу в виде пулл-реквеста.&lt;br /&gt;
&lt;br /&gt;
Защита проекта проводится во время весенней сессии.&lt;br /&gt;
&lt;br /&gt;
=== Оценивание ===&lt;br /&gt;
&lt;br /&gt;
Итог = Округление(min(10, 0.64 * ДЗ + 0.36 * ПР)),&lt;br /&gt;
&lt;br /&gt;
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.&lt;br /&gt;
&lt;br /&gt;
Округление арифметическое.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная литература ==&lt;br /&gt;
&lt;br /&gt;
* Will Kurt – Get Programming with Haskell&lt;br /&gt;
* Bryan O&#039;Sullivan, Don Stewart, John Goerzen – Real World Haskell&lt;br /&gt;
* Alexander Granin – Functional Design and Architecture&lt;br /&gt;
* Sandy Maguire – Algebra-Driven Design&lt;/div&gt;</summary>
		<author><name>Drubin</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83997</id>
		<title>Haskell 24</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83997"/>
		<updated>2024-03-04T11:58:12Z</updated>

		<summary type="html">&lt;p&gt;Drubin: ДЗ перенесено&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Промышленное программирование на Haskell, часть 1 ==&lt;br /&gt;
&lt;br /&gt;
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.&lt;br /&gt;
&lt;br /&gt;
=== Команда курса ===&lt;br /&gt;
&lt;br /&gt;
Лектор: Павел Соколов aka [https://t.me/TurtlePU @TurtlePU].&lt;br /&gt;
&lt;br /&gt;
Семинарист: Илья Костюченко aka [https://t.me/ilyakooo0 @ilyakooo0].&lt;br /&gt;
&lt;br /&gt;
Ассистент: Даниил Рубин aka [https://t.me/supremeSwings @supremeSwings].&lt;br /&gt;
&lt;br /&gt;
=== Ссылки ===&lt;br /&gt;
&lt;br /&gt;
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy&lt;br /&gt;
&lt;br /&gt;
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy&lt;br /&gt;
&lt;br /&gt;
Материалы курса: https://github.com/Haskell-HSE&lt;br /&gt;
&lt;br /&gt;
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q&lt;br /&gt;
&lt;br /&gt;
Таблица с оценками: TBD&lt;br /&gt;
&lt;br /&gt;
== Setting up ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Если вы пользуетесь Windows, установите WSL2, если ещё не.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите [https://www.haskell.org/ghcup/ ghcup] &amp;amp;mdash; скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами&lt;br /&gt;
    либо введите одну любимую команду:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;MacOS&#039;&#039;&#039;: &amp;lt;pre&amp;gt;brew install ghcup&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Arch&#039;&#039;&#039;-based distros: &amp;lt;pre&amp;gt;yay -S ghcup-hs-bin&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;WSL2&#039;&#039;&#039;, &#039;&#039;&#039;MacOS&#039;&#039;&#039; &amp;gt;= 10.13, &#039;&#039;&#039;Linux&#039;&#039;&#039;: &amp;lt;pre&amp;gt;curl --proto &#039;=https&#039; --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Windows Powershell&#039;&#039;&#039; (cringe): Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь до места установки &amp;lt;code&amp;gt;ghcup&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &amp;amp;mdash; запустите &amp;lt;code&amp;gt;ghcup list&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите &#039;&#039;&#039;&amp;lt;code style=&amp;quot;background-color:black;color:rgb(0,255,0)&amp;quot;&amp;gt;recommended&amp;lt;/code&amp;gt;&#039;&#039;&#039; версии компилятора, системы сборки и языкового сервера:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup install ghc recommended&lt;br /&gt;
ghcup install stack recommended&lt;br /&gt;
ghcup install hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь &amp;lt;code&amp;gt;~/.ghcup/bin&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt;. При необходимости добавьте этот путь сами.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Создайте символические ссылки на установленные версии программ:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup set ghc recommended&lt;br /&gt;
ghcup set stack recommended&lt;br /&gt;
ghcup set hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Настройте LSP client в своей любимой среде разработки:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Для &#039;&#039;&#039;VS Code&#039;&#039;&#039; есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;В &#039;&#039;&#039;NeoVim&#039;&#039;&#039; настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Опционально &amp;amp;mdash; установите [https://hoogle.haskell.org Hoogle] локально:&lt;br /&gt;
    &amp;lt;ol&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;cabal install hoogle&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        Допишите в файл &amp;lt;code&amp;gt;~/.ghci&amp;lt;/code&amp;gt; следующее:&amp;lt;pre&amp;gt;&lt;br /&gt;
:def hoogle \x -&amp;gt; return $ &amp;quot;:!hoogle \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
:def hdoc \x -&amp;gt; return $ &amp;quot;:!hoogle --info \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Теперь можно пользоваться Hoogle прямо из ghci с помощью команд &amp;lt;code&amp;gt;:hoogle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;:hdoc&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== План курса ==&lt;br /&gt;
&lt;br /&gt;
=== Лекции, семинары ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Лекция 05.02&#039;&#039;&#039;. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 07.02&#039;&#039;&#039;. Не состоялся.&lt;br /&gt;
* &#039;&#039;&#039;Лекция 12.02&#039;&#039;&#039;. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-12T13-19-29Z.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 14.02&#039;&#039;&#039;. Классы типов. Моноиды. Foldable. Map. [https://github.com/ilyakooo0/production-haskell/tree/dd8560938a15da072a1e1c17b1a80cb9d22e1920/seminars/1 Материалы]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Семинар%2014.02.mkv Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 19.02&#039;&#039;&#039;. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-19.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 21.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 26.02&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 28.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 04.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 06.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 11.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 13.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 18.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 20.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
&lt;br /&gt;
=== Домашние задания ===&lt;br /&gt;
&lt;br /&gt;
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.&lt;br /&gt;
&lt;br /&gt;
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн &#039;&#039;&#039;10 марта (вс) в 23:59&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 2]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 3]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Проект ===&lt;br /&gt;
&lt;br /&gt;
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Покрыть код тестами (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Не использовать &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;, если это не было обговорено заранее (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать point-free стиль, где это разумно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать пользоваться подсказками HLint;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же.&lt;br /&gt;
&lt;br /&gt;
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) &#039;&#039;&#039;в полночь перед защитой&#039;&#039;&#039;. Либо можно оформить сдачу в виде пулл-реквеста.&lt;br /&gt;
&lt;br /&gt;
Защита проекта проводится во время весенней сессии.&lt;br /&gt;
&lt;br /&gt;
=== Оценивание ===&lt;br /&gt;
&lt;br /&gt;
Итог = Округление(min(10, 0.64 * ДЗ + 0.36 * ПР)),&lt;br /&gt;
&lt;br /&gt;
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.&lt;br /&gt;
&lt;br /&gt;
Округление арифметическое.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная литература ==&lt;br /&gt;
&lt;br /&gt;
* Will Kurt – Get Programming with Haskell&lt;br /&gt;
* Bryan O&#039;Sullivan, Don Stewart, John Goerzen – Real World Haskell&lt;br /&gt;
* Alexander Granin – Functional Design and Architecture&lt;br /&gt;
* Sandy Maguire – Algebra-Driven Design&lt;/div&gt;</summary>
		<author><name>Drubin</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83768</id>
		<title>Haskell 24</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83768"/>
		<updated>2024-02-20T08:55:50Z</updated>

		<summary type="html">&lt;p&gt;Drubin: Добавлены ссылки и материалы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Промышленное программирование на Haskell, часть 1 ==&lt;br /&gt;
&lt;br /&gt;
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.&lt;br /&gt;
&lt;br /&gt;
=== Команда курса ===&lt;br /&gt;
&lt;br /&gt;
Лектор: Павел Соколов aka [https://t.me/TurtlePU @TurtlePU].&lt;br /&gt;
&lt;br /&gt;
Семинарист: Илья Костюченко aka [https://t.me/ilyakooo0 @ilyakooo0].&lt;br /&gt;
&lt;br /&gt;
Ассистент: Даниил Рубин aka [https://t.me/supremeSwings @supremeSwings].&lt;br /&gt;
&lt;br /&gt;
=== Ссылки ===&lt;br /&gt;
&lt;br /&gt;
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy&lt;br /&gt;
&lt;br /&gt;
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy&lt;br /&gt;
&lt;br /&gt;
Материалы курса: https://github.com/Haskell-HSE&lt;br /&gt;
&lt;br /&gt;
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q&lt;br /&gt;
&lt;br /&gt;
Таблица с оценками: TBD&lt;br /&gt;
&lt;br /&gt;
== Setting up ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Если вы пользуетесь Windows, установите WSL2, если ещё не.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите [https://www.haskell.org/ghcup/ ghcup] &amp;amp;mdash; скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами&lt;br /&gt;
    либо введите одну любимую команду:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;MacOS&#039;&#039;&#039;: &amp;lt;pre&amp;gt;brew install ghcup&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Arch&#039;&#039;&#039;-based distros: &amp;lt;pre&amp;gt;yay -S ghcup-hs-bin&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;WSL2&#039;&#039;&#039;, &#039;&#039;&#039;MacOS&#039;&#039;&#039; &amp;gt;= 10.13, &#039;&#039;&#039;Linux&#039;&#039;&#039;: &amp;lt;pre&amp;gt;curl --proto &#039;=https&#039; --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Windows Powershell&#039;&#039;&#039; (cringe): Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь до места установки &amp;lt;code&amp;gt;ghcup&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &amp;amp;mdash; запустите &amp;lt;code&amp;gt;ghcup list&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите &#039;&#039;&#039;&amp;lt;code style=&amp;quot;background-color:black;color:rgb(0,255,0)&amp;quot;&amp;gt;recommended&amp;lt;/code&amp;gt;&#039;&#039;&#039; версии компилятора, системы сборки и языкового сервера:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup install ghc recommended&lt;br /&gt;
ghcup install stack recommended&lt;br /&gt;
ghcup install hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь &amp;lt;code&amp;gt;~/.ghcup/bin&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt;. При необходимости добавьте этот путь сами.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Создайте символические ссылки на установленные версии программ:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup set ghc recommended&lt;br /&gt;
ghcup set stack recommended&lt;br /&gt;
ghcup set hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Настройте LSP client в своей любимой среде разработки:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Для &#039;&#039;&#039;VS Code&#039;&#039;&#039; есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;В &#039;&#039;&#039;NeoVim&#039;&#039;&#039; настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Опционально &amp;amp;mdash; установите [https://hoogle.haskell.org Hoogle] локально:&lt;br /&gt;
    &amp;lt;ol&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;cabal install hoogle&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        Допишите в файл &amp;lt;code&amp;gt;~/.ghci&amp;lt;/code&amp;gt; следующее:&amp;lt;pre&amp;gt;&lt;br /&gt;
:def hoogle \x -&amp;gt; return $ &amp;quot;:!hoogle \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
:def hdoc \x -&amp;gt; return $ &amp;quot;:!hoogle --info \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Теперь можно пользоваться Hoogle прямо из ghci с помощью команд &amp;lt;code&amp;gt;:hoogle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;:hdoc&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== План курса ==&lt;br /&gt;
&lt;br /&gt;
=== Лекции, семинары ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Лекция 05.02&#039;&#039;&#039;. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 07.02&#039;&#039;&#039;. Не состоялся.&lt;br /&gt;
* &#039;&#039;&#039;Лекция 12.02&#039;&#039;&#039;. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-12T13-19-29Z.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 14.02&#039;&#039;&#039;. Классы типов. Моноиды. Foldable. Map. [https://github.com/ilyakooo0/production-haskell/tree/dd8560938a15da072a1e1c17b1a80cb9d22e1920/seminars/1 Материалы]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Семинар%2014.02.mkv Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 19.02&#039;&#039;&#039;. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [https://disk.yandex.ru/d/6R3S8bSEkRoE8Q/Лекция%202024-02-19.mp4 Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 21.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 26.02&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 28.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 04.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 06.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 11.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 13.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 18.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 20.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
&lt;br /&gt;
=== Домашние задания ===&lt;br /&gt;
&lt;br /&gt;
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.&lt;br /&gt;
&lt;br /&gt;
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн &#039;&#039;&#039;5 марта (вт) в 23:59&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 2]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 3]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Проект ===&lt;br /&gt;
&lt;br /&gt;
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Покрыть код тестами (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Не использовать &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;, если это не было обговорено заранее (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать point-free стиль, где это разумно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать пользоваться подсказками HLint;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же.&lt;br /&gt;
&lt;br /&gt;
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) &#039;&#039;&#039;в полночь перед защитой&#039;&#039;&#039;. Либо можно оформить сдачу в виде пулл-реквеста.&lt;br /&gt;
&lt;br /&gt;
Защита проекта проводится во время весенней сессии.&lt;br /&gt;
&lt;br /&gt;
=== Оценивание ===&lt;br /&gt;
&lt;br /&gt;
Итог = Округление(min(10, 0.64 * ДЗ + 0.36 * ПР)),&lt;br /&gt;
&lt;br /&gt;
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.&lt;br /&gt;
&lt;br /&gt;
Округление арифметическое.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная литература ==&lt;br /&gt;
&lt;br /&gt;
* Will Kurt – Get Programming with Haskell&lt;br /&gt;
* Bryan O&#039;Sullivan, Don Stewart, John Goerzen – Real World Haskell&lt;br /&gt;
* Alexander Granin – Functional Design and Architecture&lt;br /&gt;
* Sandy Maguire – Algebra-Driven Design&lt;/div&gt;</summary>
		<author><name>Drubin</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83767</id>
		<title>Haskell 24</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=Haskell_24&amp;diff=83767"/>
		<updated>2024-02-20T08:48:06Z</updated>

		<summary type="html">&lt;p&gt;Drubin: Добавлена ссылка на записи занятий&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Промышленное программирование на Haskell, часть 1 ==&lt;br /&gt;
&lt;br /&gt;
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.&lt;br /&gt;
&lt;br /&gt;
=== Команда курса ===&lt;br /&gt;
&lt;br /&gt;
Лектор: Павел Соколов aka [https://t.me/TurtlePU @TurtlePU].&lt;br /&gt;
&lt;br /&gt;
Семинарист: Илья Костюченко aka [https://t.me/ilyakooo0 @ilyakooo0].&lt;br /&gt;
&lt;br /&gt;
Ассистент: Даниил Рубин aka [https://t.me/supremeSwings @supremeSwings].&lt;br /&gt;
&lt;br /&gt;
=== Ссылки ===&lt;br /&gt;
&lt;br /&gt;
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy&lt;br /&gt;
&lt;br /&gt;
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy&lt;br /&gt;
&lt;br /&gt;
Материалы курса: https://github.com/Haskell-HSE&lt;br /&gt;
&lt;br /&gt;
Записи лекций и семинаров: https://disk.yandex.ru/d/6R3S8bSEkRoE8Q&lt;br /&gt;
&lt;br /&gt;
Таблица с оценками: TBD&lt;br /&gt;
&lt;br /&gt;
== Setting up ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Если вы пользуетесь Windows, установите WSL2, если ещё не.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите [https://www.haskell.org/ghcup/ ghcup] &amp;amp;mdash; скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами&lt;br /&gt;
    либо введите одну любимую команду:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;MacOS&#039;&#039;&#039;: &amp;lt;pre&amp;gt;brew install ghcup&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Arch&#039;&#039;&#039;-based distros: &amp;lt;pre&amp;gt;yay -S ghcup-hs-bin&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;WSL2&#039;&#039;&#039;, &#039;&#039;&#039;MacOS&#039;&#039;&#039; &amp;gt;= 10.13, &#039;&#039;&#039;Linux&#039;&#039;&#039;: &amp;lt;pre&amp;gt;curl --proto &#039;=https&#039; --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt; &#039;&#039;&#039;Windows Powershell&#039;&#039;&#039; (cringe): Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь до места установки &amp;lt;code&amp;gt;ghcup&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &amp;amp;mdash; запустите &amp;lt;code&amp;gt;ghcup list&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Установите &#039;&#039;&#039;&amp;lt;code style=&amp;quot;background-color:black;color:rgb(0,255,0)&amp;quot;&amp;gt;recommended&amp;lt;/code&amp;gt;&#039;&#039;&#039; версии компилятора, системы сборки и языкового сервера:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup install ghc recommended&lt;br /&gt;
ghcup install stack recommended&lt;br /&gt;
ghcup install hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Убедитесь, что путь &amp;lt;code&amp;gt;~/.ghcup/bin&amp;lt;/code&amp;gt; содержится в &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt;. При необходимости добавьте этот путь сами.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Создайте символические ссылки на установленные версии программ:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup set ghc recommended&lt;br /&gt;
ghcup set stack recommended&lt;br /&gt;
ghcup set hls recommended&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Настройте LSP client в своей любимой среде разработки:&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Для &#039;&#039;&#039;VS Code&#039;&#039;&#039; есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;В &#039;&#039;&#039;NeoVim&#039;&#039;&#039; настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS.&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Опционально &amp;amp;mdash; установите [https://hoogle.haskell.org Hoogle] локально:&lt;br /&gt;
    &amp;lt;ol&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;cabal install hoogle&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        Допишите в файл &amp;lt;code&amp;gt;~/.ghci&amp;lt;/code&amp;gt; следующее:&amp;lt;pre&amp;gt;&lt;br /&gt;
:def hoogle \x -&amp;gt; return $ &amp;quot;:!hoogle \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
:def hdoc \x -&amp;gt; return $ &amp;quot;:!hoogle --info \&amp;quot;&amp;quot; ++ x ++ &amp;quot;\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;Теперь можно пользоваться Hoogle прямо из ghci с помощью команд &amp;lt;code&amp;gt;:hoogle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;:hdoc&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ol&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== План курса ==&lt;br /&gt;
&lt;br /&gt;
=== Лекции, семинары ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Лекция 05.02&#039;&#039;&#039;. Синтаксис. Ленивые вычисления. Типы данных. Классы типов. [https://github.com/Haskell-HSE/haskell-lectures-2024/blob/main/1.Intro.md Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 07.02&#039;&#039;&#039;. Не состоялся.&lt;br /&gt;
* &#039;&#039;&#039;Лекция 12.02&#039;&#039;&#039;. Законы классов типов. Классы Semigroup, Monoid, Foldable, Functor, Applicative, Monad. Тестирование свойств. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 14.02&#039;&#039;&#039;. ???. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 19.02&#039;&#039;&#039;. Примеры монад: Maybe, Either, Reader, Writer, State. Монада парсера. Класс Alternative. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 21.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 26.02&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 28.02&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 04.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 06.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 11.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 13.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Лекция 18.03&#039;&#039;&#039;. TBA. [ Конспект]. [ Запись].&lt;br /&gt;
* &#039;&#039;&#039;Семинар 20.03&#039;&#039;&#039;. TBA. [ Материалы]. [ Запись].&lt;br /&gt;
&lt;br /&gt;
=== Домашние задания ===&lt;br /&gt;
&lt;br /&gt;
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.&lt;br /&gt;
&lt;br /&gt;
* [https://classroom.github.com/a/uTxdKUjY Домашнее задание 1]. Дедлайн &#039;&#039;&#039;5 марта (вт) в 23:59&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 2]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
* [ Домашнее задание 3]. Дедлайн &#039;&#039;&#039;TBA&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Проект ===&lt;br /&gt;
&lt;br /&gt;
В качестве проекта предлагается доработать одно из домашних заданий следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Расширить функционал приложения, выполненного в домашнем задании (масштаб работ нужно обсудить с лектором либо с семинаристом) (4 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Покрыть код тестами (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Не использовать &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt;, если это не было обговорено заранее (2 балла из 10);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Проанализировать производительность приложения (1 балл из 10; 2 балла, если в проекте разрешён unsafe);&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Поддерживать чистоту кода (1 балл из 10; 2 балла, если в проекте разрешён unsafe):&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать использовать готовые комбинаторы из стандартной библиотеки вместо явного паттерн-матчинга стандартных типов данных;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать point-free стиль, где это разумно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;предпочитать пользоваться подсказками HLint;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;код должен быть консистентно отформатирован, неиспользованных импортов быть не должно;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;если в проекте разрешён unsafe, он должен быть отделён от остального приложения какой-то безопасной абстракцией.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможны групповые проекты. Также возможны инициативные темы; они обсуждаются индивидуально, но разбалловка остаётся такой же.&lt;br /&gt;
&lt;br /&gt;
Проект должен быть оформлен в приватном репозитории на github. Оценка выставляется за проект в том состоянии, в котором находилась default ветка репозитория (скорее всего main либо master) &#039;&#039;&#039;в полночь перед защитой&#039;&#039;&#039;. Либо можно оформить сдачу в виде пулл-реквеста.&lt;br /&gt;
&lt;br /&gt;
Защита проекта проводится во время весенней сессии.&lt;br /&gt;
&lt;br /&gt;
=== Оценивание ===&lt;br /&gt;
&lt;br /&gt;
Итог = Округление(min(10, 0.64 * ДЗ + 0.36 * ПР)),&lt;br /&gt;
&lt;br /&gt;
где ДЗ – средняя оценка за все домашние задания, ПР – оценка за проектную работу.&lt;br /&gt;
&lt;br /&gt;
Округление арифметическое.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная литература ==&lt;br /&gt;
&lt;br /&gt;
* Will Kurt – Get Programming with Haskell&lt;br /&gt;
* Bryan O&#039;Sullivan, Don Stewart, John Goerzen – Real World Haskell&lt;br /&gt;
* Alexander Granin – Functional Design and Architecture&lt;br /&gt;
* Sandy Maguire – Algebra-Driven Design&lt;/div&gt;</summary>
		<author><name>Drubin</name></author>
	</entry>
</feed>