<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=Haskell_23</id>
	<title>Haskell 23 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=Haskell_23"/>
	<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=Haskell_23&amp;action=history"/>
	<updated>2026-06-06T13:18:38Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wikicshse.ru/index.php?title=Haskell_23&amp;diff=317&amp;oldid=prev</id>
		<title>imported&gt;TurtlePU: /* Лекции, семинары */</title>
		<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=Haskell_23&amp;diff=317&amp;oldid=prev"/>
		<updated>2023-03-21T11:48:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Лекции, семинары&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Промышленное программирование на Haskell ==&lt;br /&gt;
&lt;br /&gt;
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.&lt;br /&gt;
&lt;br /&gt;
Лектор и семинарист: Павел Соколов aka [https://t.me/TurtlePU @TurtlePU].&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/TurtlePU/haskell-2023&lt;br /&gt;
&lt;br /&gt;
Записи лекций и семинаров: https://www.youtube.com/playlist?list=PLn8rjO6vyaY-UKMLisT-ncNhHufQ-_e_p&lt;br /&gt;
&lt;br /&gt;
Таблица с оценками: https://docs.google.com/spreadsheets/d/1jBv9h6ZOsq8fSTbkB9Ug4D6LU6Ld8dz-9bKUh_IJumM/edit?usp=sharing&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; &amp;#039;&amp;#039;&amp;#039;MacOS&amp;#039;&amp;#039;&amp;#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; &amp;#039;&amp;#039;&amp;#039;Arch&amp;#039;&amp;#039;&amp;#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; &amp;#039;&amp;#039;&amp;#039;WSL2&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;MacOS&amp;#039;&amp;#039;&amp;#039; &amp;gt;= 10.13, &amp;#039;&amp;#039;&amp;#039;Linux&amp;#039;&amp;#039;&amp;#039;: &amp;lt;pre&amp;gt;curl --proto &amp;#039;=https&amp;#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; &amp;#039;&amp;#039;&amp;#039;Windows Powershell&amp;#039;&amp;#039;&amp;#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;
    Установите &amp;#039;&amp;#039;&amp;#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;&amp;#039;&amp;#039;&amp;#039; версии компилятора, пакетного менеджера и языкового сервера:&amp;lt;pre&amp;gt;&lt;br /&gt;
ghcup install ghc recommended&lt;br /&gt;
ghcup install cabal 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 cabal 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;Для &amp;#039;&amp;#039;&amp;#039;VS Code&amp;#039;&amp;#039;&amp;#039; есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;В &amp;#039;&amp;#039;&amp;#039;NeoVim&amp;#039;&amp;#039;&amp;#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;
# [https://youtu.be/uLKF3g4SaVw Лекция]: начало курса; где используется Haskell. [https://youtu.be/vGa5U2XpXWQ Семинар]: рекап курса по Функциональному программированию.&lt;br /&gt;
# [https://youtu.be/7646Pfpu8Hk Лекция]: окончание рекапа; введение в тестирование с помощью QuickCheck. [https://youtu.be/Z5WFM7YofBo Семинар]: практика с QuickCheck; newtype pattern.&lt;br /&gt;
# [https://youtu.be/vPh0yTI9L98 Лекция]: трансформеры монад; библиотека transformers. [https://youtu.be/gnSXCxsjRmc Семинар]: паттерн tagless final; библиотека mtl.&lt;br /&gt;
# [https://youtu.be/cJL3-WmAmrk Лекция]: IORef и паттерн Handle; трансформер ReaderT и паттерн RIO. [https://youtu.be/QbhuFbna5Xc Семинар]: Паттерн Has; IOArray; разбор юзкейса занятий 3-4.&lt;br /&gt;
# [https://youtu.be/W0CQTzOZNLY Лекция] &amp;#039;&amp;#039;&amp;#039;Многопоточность в Haskell&amp;#039;&amp;#039;&amp;#039;: примитив par; синхронизация через MVar и Chan. [https://youtu.be/mVaMDU-aCjs Семинар] &amp;#039;&amp;#039;&amp;#039;Исключения в Haskell&amp;#039;&amp;#039;&amp;#039;: синхронные исключения (в т.ч. в чистом коде); асинхронные исключения; bracket.&lt;br /&gt;
# [https://youtu.be/CS5Fh1Faczs Лекция] &amp;#039;&amp;#039;&amp;#039;Управление ресурсами в Haskell&amp;#039;&amp;#039;&amp;#039;: bracket; ResourceT; разбор юзкейса (стриминг). [https://youtu.be/nft63JtubxU Семинар]: стриминг с помощью библиотеки conduit.&lt;br /&gt;
&lt;br /&gt;
=== Домашние задания ===&lt;br /&gt;
&lt;br /&gt;
Практические задания по пройденным темам в виде мини-проектов cabal. За каждое домашнее задание можно получить до 12 баллов.&lt;br /&gt;
&lt;br /&gt;
Условия публикуются в [https://github.com/TurtlePU/haskell-2023 репозитории курса].&lt;br /&gt;
&lt;br /&gt;
# Повторение Haskell, введение в QuickCheck. До 8 февраля 23:59. [https://github.com/TurtlePU/haskell-2023/tree/main/hw-quickcheck Ссылка]&lt;br /&gt;
# Трансформеры монад, tagless final, RIO. До 12 марта 23:59. [https://github.com/TurtlePU/haskell-2023/tree/main/hw-effects Ссылка]&lt;br /&gt;
# Nothing&lt;br /&gt;
# Free Monad, DSL, рекурсия. До 1 апреля 23:59. [https://github.com/TurtlePU/haskell-2023/tree/main/hw-spreadsheet Ссылка]&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) &amp;#039;&amp;#039;&amp;#039;в полночь перед защитой&amp;#039;&amp;#039;&amp;#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&amp;#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>imported&gt;TurtlePU</name></author>
	</entry>
</feed>