Haskell 25 — различия между версиями
TurtlePU (обсуждение | вклад) (Новая страница: «== Промышленное программирование на Haskell == Весенний курс по выбору для студентов 4 курса…») |
TurtlePU (обсуждение | вклад) (→Setting up) |
||
| Строка 25: | Строка 25: | ||
== Setting up == | == Setting up == | ||
| − | + | # Установка компилятора, системы сборки, языкового сервера | |
| − | + | #* (Рекомендованный способ.) Через [https://www.haskell.org/ghcup/ ghcup]: | |
| − | + | #*# Скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами либо введите одну любимую команду: | |
| − | + | #*#* '''MacOS''': <pre>brew install ghcup</pre> | |
| − | + | #*#* '''Arch'''-based distros: <pre>yay -S ghcup-hs-bin</pre> | |
| − | + | #*#* '''WSL2''', '''MacOS''' >= 10.13, '''Linux''': <pre>curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh</pre> | |
| − | + | #*#* '''Windows''': Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]. | |
| − | + | #*# Убедитесь, что путь до места установки <code>ghcup</code> содержится в <code>$PATH</code> — запустите <code>ghcup list</code>. | |
| − | + | #*# Установите '''<code style="background-color:black;color:rgb(0,255,0)">recommended</code>''' версии компилятора, системы сборки и языкового сервера:<pre> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
ghcup install ghc recommended | ghcup install ghc recommended | ||
ghcup install stack recommended | ghcup install stack recommended | ||
ghcup install hls recommended</pre> | ghcup install hls recommended</pre> | ||
| − | + | #*# Убедитесь, что путь <code>~/.ghcup/bin</code> содержится в <code>$PATH</code>. При необходимости добавьте этот путь сами. | |
| − | + | #*# Создайте символические ссылки на установленные версии программ:<pre> | |
| − | + | ||
| − | + | ||
ghcup set ghc recommended | ghcup set ghc recommended | ||
ghcup set stack recommended | ghcup set stack recommended | ||
ghcup set hls recommended</pre> | ghcup set hls recommended</pre> | ||
| − | + | #* (Если предыдущий вариант не сработал) '''Windows''': <pre>choco install haskell-language-server haskell-stack && refreshenv</pre> | |
| − | + | # Настройте LSP client в своей любимой среде разработки: | |
| − | + | #* Для '''VS Code''' есть [https://github.com/haskell/vscode-haskell плагин]. Настройка: TBD | |
| − | + | #* В '''NeoVim''' настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS. | |
| − | + | #* Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь]. | |
| − | + | # (Опционально.) Установите [https://hoogle.haskell.org Hoogle] локально: | |
| − | + | ## <code>cabal install hoogle</code> | |
| − | + | ## Допишите в файл <code>~/.ghci</code> следующее:<pre> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
:def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\"" | :def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\"" | ||
:def hdoc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""</pre> | :def hdoc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""</pre> | ||
| − | + | ## Теперь можно пользоваться Hoogle прямо из ghci с помощью команд <code>:hoogle</code> и <code>:hdoc</code> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
== План курса == | == План курса == | ||
Версия 20:11, 16 января 2025
Содержание
Промышленное программирование на Haskell
Весенний курс по выбору для студентов 4 курса ФКН ВШЭ.
Команда курса
Лектор: Павел Соколов aka @TurtlePU.
Семинарист: Илья Костюченко aka @ilyakooo0.
Ассистенты: Ислам Талипов aka @lishy2 и Глеб Смирнов aka @liferooter.
Ссылки
Канал в телеграм: https://t.me/+Is4I3YPaBWk3NjIy
Чат в телеграм: https://t.me/+lcim6Ukmojc5ZGUy
Материалы курса: https://github.com/Haskell-HSE
Записи лекций и семинаров: TBD
Таблица с оценками: TBD
Setting up
- Установка компилятора, системы сборки, языкового сервера
- (Рекомендованный способ.) Через 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: Команда доступна по ссылке.
- MacOS:
- Убедитесь, что путь до места установки
ghcupсодержится в$PATH— запуститеghcup list. - Установите
recommendedверсии компилятора, системы сборки и языкового сервера:
- Скачайте бинарный файл сами либо введите одну любимую команду:
- (Рекомендованный способ.) Через ghcup:
- Убедитесь, что путь
~/.ghcup/binсодержится в$PATH. При необходимости добавьте этот путь сами. - Создайте символические ссылки на установленные версии программ:
- Убедитесь, что путь
- (Если предыдущий вариант не сработал) Windows:
choco install haskell-language-server haskell-stack && refreshenv
- (Если предыдущий вариант не сработал) Windows:
- Настройте LSP client в своей любимой среде разработки:
- Для VS Code есть плагин. Настройка: TBD
- В NeoVim настройте nvim-lspconfig, он знает про HLS.
- Инструкцию для других сред можно найти здесь.
- (Опционально.) Установите Hoogle локально:
-
cabal install hoogle - Допишите в файл
~/.ghciследующее:
-
- Теперь можно пользоваться Hoogle прямо из ghci с помощью команд
:hoogleи:hdoc
- Теперь можно пользоваться Hoogle прямо из ghci с помощью команд
План курса
Лекции, семинары
- Лекция I (14 янв). Где и почему используют Haskell? Синтаксис. Ленивые вычисления. Конспект. [ Запись].
- Семинар I (15 янв). ???. [ Материалы]. [ Запись].
- Лекция II (21 янв). TBA. [ Конспект]. [ Запись].
- Семинар II (22 янв). TBA. [ Материалы]. [ Запись].
- Лекция III (28 янв). TBA. [ Конспект]. [ Запись].
- Семинар III (29 янв). TBA. [ Материалы]. [ Запись].
- Лекция IV (04 фев). TBA. [ Конспект]. [ Запись].
- Семинар IV (05 фев). TBA. [ Материалы]. [ Запись].
- Лекция V (11 фев). TBA. [ Конспект]. [ Запись].
- Семинар V (12 фев). TBA. [ Материалы]. [ Запись].
- Лекция VI (18 фев). TBA. [ Конспект]. [ Запись].
- Семинар VI (19 фев). TBA. [ Материалы]. [ Запись].
- Лекция VII (25 фев). TBA. [ Конспект]. [ Запись].
- Семинар VII (26 фев). TBA. [ Материалы]. [ Запись].
- Лекция VIII (04 мар). TBA. [ Конспект]. [ Запись].
- Семинар VIII (05 мар). TBA. [ Материалы]. [ Запись].
- Лекция IX (11 мар). TBA. [ Конспект]. [ Запись].
- Семинар IX (12 мар). TBA. [ Материалы]. [ Запись].
- Лекция X (18 мар). TBA. [ Конспект]. [ Запись].
- Семинар X (19 мар). TBA. [ Материалы]. [ Запись].
Домашние задания
Практические задания по пройденным темам в виде мини-проектов stack. За каждое домашнее задание можно получить до 12 баллов.
- [ Домашнее задание 1]. Дедлайн TBA.
- [ Домашнее задание 2]. Дедлайн TBA.
- [ Домашнее задание 3]. Дедлайн TBA.
- [ Домашнее задание 4]. Дедлайн 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