Haskell 25 — различия между версиями
TurtlePU (обсуждение | вклад) (→Setting up) |
TurtlePU (обсуждение | вклад) (→Setting up) |
||
| Строка 28: | Строка 28: | ||
#* (Рекомендованный способ.) Через [https://www.haskell.org/ghcup/ ghcup]: | #* (Рекомендованный способ.) Через [https://www.haskell.org/ghcup/ ghcup]: | ||
#*# Скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами либо введите одну любимую команду: | #*# Скачайте [https://downloads.haskell.org/~ghcup/ бинарный файл] сами либо введите одну любимую команду: | ||
| − | #*#* '''MacOS''': < | + | #*#* '''MacOS''': <code>brew install ghcup</code> |
| − | #*#* '''Arch'''-based distros: < | + | #*#* '''Arch'''-based distros: <code>yay -S ghcup-hs-bin</code> |
| − | #*#* '''WSL2''', '''MacOS''' >= 10.13, '''Linux''': < | + | #*#* '''WSL2''', '''MacOS''' >= 10.13, '''Linux''': <code>curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh</code> |
#*#* '''Windows''': Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]. | #*#* '''Windows''': Команда доступна по [https://www.haskell.org/ghcup/install/#installation ссылке]. | ||
| − | #*# Убедитесь, что путь до места установки <code>ghcup</code> содержится в <code>$PATH</code> — запустите <code>ghcup list</code>. | + | #*# Убедитесь, что путь до места установки <code>ghcup</code> (скорее всего, <code>~/.ghcup/bin</code> либо <code>C:/ghcup</code>) содержится в <code>$PATH</code> — запустите <code>ghcup list</code>. При необходимости добавьте этот путь сами. |
| − | #*# Установите '''<code style="background-color:black;color:rgb(0,255,0)">recommended</code>''' версии компилятора, системы сборки и языкового сервера:< | + | #*# Установите '''<code style="background-color:black;color:rgb(0,255,0)">recommended</code>''' версии компилятора, системы сборки и языкового сервера: |
| − | ghcup install ghc | + | #*## <code>ghcup install ghc recommended</code> |
| − | + | #*## <code>ghcup install stack recommended</code> | |
| − | + | #*## <code>ghcup install hls recommended</code> | |
| − | #*# | + | #*# Создайте символические ссылки на установленные версии программ: |
| − | #*# Создайте символические ссылки на установленные версии программ:< | + | #*## <code>ghcup set ghc recommended</code> |
| − | ghcup set ghc recommended | + | #*## <code>ghcup set stack recommended</code> |
| − | ghcup set stack recommended | + | #*## <code>ghcup set hls recommended</code> |
| − | ghcup set hls recommended</ | + | #* (Если предыдущий вариант не сработал.) '''Windows''': |
| − | #* (Если предыдущий вариант не сработал) '''Windows''': < | + | #*# <code>choco install haskell-language-server haskell-stack</code> |
| + | #*# <code>refreshenv</code> | ||
# Настройте LSP client в своей любимой среде разработки: | # Настройте LSP client в своей любимой среде разработки: | ||
| − | #* Для '''VS Code''' есть [https://github.com/haskell/vscode-haskell плагин]. | + | #* Для '''VS Code''' есть [https://github.com/haskell/vscode-haskell плагин]. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через <code>chocolatey</code>, выбирайте вторую опцию; иначе сначала попробуйте через GHCup. |
#* В '''NeoVim''' настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS. | #* В '''NeoVim''' настройте [https://github.com/neovim/nvim-lspconfig nvim-lspconfig], он знает про HLS. | ||
#* Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь]. | #* Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь]. | ||
# (Опционально.) Установите [https://hoogle.haskell.org Hoogle] локально: | # (Опционально.) Установите [https://hoogle.haskell.org Hoogle] локально: | ||
## <code>cabal install hoogle</code> | ## <code>cabal install hoogle</code> | ||
| − | + | ## Теперь можно пользоваться Hoogle прямо из ghci с помощью команды <code>:!hoogle</code> и <code>:!hoogle --info</code> | |
| − | + | ||
| − | + | ||
| − | ## Теперь можно пользоваться Hoogle прямо из ghci с помощью | + | |
== План курса == | == План курса == | ||
Версия 20:35, 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(скорее всего,~/.ghcup/binлибоC:/ghcup) содержится в$PATH— запуститеghcup list. При необходимости добавьте этот путь сами. - Установите
recommendedверсии компилятора, системы сборки и языкового сервера:-
ghcup install ghc recommended -
ghcup install stack recommended -
ghcup install hls recommended
-
- Создайте символические ссылки на установленные версии программ:
-
ghcup set ghc recommended -
ghcup set stack recommended -
ghcup set hls recommended
-
- Скачайте бинарный файл сами либо введите одну любимую команду:
- (Если предыдущий вариант не сработал.) Windows:
-
choco install haskell-language-server haskell-stack -
refreshenv
-
- (Рекомендованный способ.) Через ghcup:
- Настройте LSP client в своей любимой среде разработки:
- Для VS Code есть плагин. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через
chocolatey, выбирайте вторую опцию; иначе сначала попробуйте через GHCup. - В NeoVim настройте nvim-lspconfig, он знает про HLS.
- Инструкцию для других сред можно найти здесь.
- Для VS Code есть плагин. Скорее всего, при запуске он предложит выбрать, каким образом ему находить HLS: через GHCup или вручную через PATH. Если устанавливали через
- (Опционально.) Установите Hoogle локально:
-
cabal install hoogle - Теперь можно пользоваться Hoogle прямо из ghci с помощью команды
:!hoogleи:!hoogle --info
-
План курса
Лекции, семинары
- Лекция 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