{"id":25877724,"url":"https://github.com/funfunfine/urfu-fp-intro-20","last_synced_at":"2025-10-07T00:50:37.726Z","repository":{"id":116212694,"uuid":"242709338","full_name":"FunFunFine/urfu-fp-intro-20","owner":"FunFunFine","description":"Спецкурс \"Введение в функциональное программирование\" в УрФУ в 2020","archived":false,"fork":false,"pushed_at":"2020-06-04T10:03:05.000Z","size":211,"stargazers_count":0,"open_issues_count":0,"forks_count":38,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-20T01:07:28.140Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haskell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FunFunFine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-24T10:40:23.000Z","updated_at":"2022-01-10T12:33:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"84d9b22e-93d5-4a5b-aa34-7856be57a629","html_url":"https://github.com/FunFunFine/urfu-fp-intro-20","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FunFunFine/urfu-fp-intro-20","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunFunFine%2Furfu-fp-intro-20","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunFunFine%2Furfu-fp-intro-20/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunFunFine%2Furfu-fp-intro-20/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunFunFine%2Furfu-fp-intro-20/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FunFunFine","download_url":"https://codeload.github.com/FunFunFine/urfu-fp-intro-20/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunFunFine%2Furfu-fp-intro-20/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278703579,"owners_count":26031205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-02T11:30:03.605Z","updated_at":"2025-10-07T00:50:37.684Z","avatar_url":"https://github.com/FunFunFine.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# urfu-fp-intro-20\n\nСпецкурс \"Введение в функциональное программирование\" в УрФУ в 2020.\n\n# Подготовка среды\n\n## Установите Haskell\n\n### MacOS\n\nhttps://www.haskell.org/platform/mac.html или\n\n```\nbrew install ghc cabal-install\n```\nТакже добавьте `.cabal/bin` в `PATH`:\n```\nexport PATH=$PATH:~/.cabal/bin\n```\n### Linux\n\nhttps://www.haskell.org/downloads/linux/\n\n### Windows\n\nhttps://www.haskell.org/platform/windows.html.\n\n## Проверьте, что всё работает\n\nПроверьте, что установлен компилятор `ghc \u003e= 8.2`\n\n```\nghc --version\nThe Glorious Glasgow Haskell Compilation System, version 8.8.1\n```\n\nЧтобы убедиться, что всё установлено верно, запустите тест:\n\n```\ncd urfu-fp-intro-20\ncabal update\ncabal new-run spec -- --match \"Lecture00\"\n```\n\nВы должны увидеть, что \"всё работает\":\n\n![setup is ok](./assets/SetUpIsDone.jpg)\n\nПо любым вопросам можно обратиться к официальной [документации](https://www.haskell.org/documentation/) или к преподавателям в чате [https://teleg.run/urfu_fp_intro_20_chat](https://teleg.run/urfu_fp_intro_20_chat).\n\n## Среда разработки\n\nКурс рассчитан на использование редактора с подсветкой кода и терминалом.\n\nПри желании можно настроить среду разработки для подсветки типов в редакторе. На это потребуется время и не факт, что все получится, поэтому это опционально.\n\nДля Haskell есть интеграции с разными редакторами, но большинство использует [GHC IDE](https://github.com/digital-asset/ghcide). Пока нет скриптов для установки, поэтому нужно собирать ее вручную, что тоже описано в доке.\n\nВажно — перед установкой выполните команду `cabal update`, чтобы подгрузить информацию о доступных пакетах.\nПосле успешной установки `ghcide` нужно поставить [плагин в VS Code](https://marketplace.visualstudio.com/items?itemName=DigitalAssetHoldingsLLC.ghcide) или нужный редактор.\n\nПро IntelliJ IDEA: для IDE от Jetbrains есть плагин для Хаскеля, но он рассчитан на работу со Stack — другим менеджером пакетов, обратите внимание.\n\n# Как решать задачи\n\nМатериалы занятий можно найти в `src/Lecture*.hs`. В каждом занятии есть материал для изучения и задачи, которые нужно решить.\n\n### GHCI\n\nДля экспериментов вам пригодится интерактивная среда Haskell — `GHCI`. Узнать о ней подробнее можно на странице [документации](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html). Чтобы выйти из `GHCI` используйте команду `:quit`.\n\nМногострочные определение задаются при помощи `:{` и `:}`:\n\n```\n:{\nhello name = if name == \"John\"\n  then \"hello john!\"\n  else \"i don't know you\"\n:}\n```\n\n### Запуск тестов\n\nЧтобы проверить своё решение нужно запустить тесты с помощью `cabal`. Например, для запуска тестов третьей лекции нужно выполнить команду:\n\n```\ncabal new-run spec -- --match \"Lecture03\"\n```\n\n### Загрузка модуля\n\nЧтобы проверить, что у вас получилось, не запуская тесты, можно загрузить модуль очередного занятия в `ghci`. Например, модуль первого занятия можно загрузить с помощью команды:\n\n```\nghci src/Lecture01.hs\n```\n\nЕсли вы внесли какие-то изменения, то нужно обновить модуль в `ghci` с помощью команды `reload`:\n\n```\n:reload Lecture01\n```\n\nили просто\n\n```\n:r Lecture01\n```\n\n# Как сдавать задачи\n\nДля сдачи задач вам потребуются базовые навыки работы с `git`. \nЕсли до этого вы с ним не работали, можете изучить материалы из [kontur-courses/git](https://github.com/kontur-courses/git).\n\n### Запустите тесты\nУбедитесь, что у вас проходят все тесты к лекции. [Здесь](https://github.com/ak3n/urfu-fp-intro-20#%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2) посмотрите, как их запустить.\n\n### Отправьте pull request\n\nСоздайте отдельную ветку, закоммитив изменения:\n\n```\ngit checkout -b lecture01\ngit add src/Lecture01.hs\ngit commit -m \"add lecture01\"\n```\n\nСоздайте fork этого репозитория и запушайте в него свои изменения:\n\n```\ngit remote add fork git@github.com:\u003cваш_юзернейм\u003e/urfu-fp-intro-20.git \ngit push fork lecture01\n```\n\nFork репозитория достаточно сделать только один раз перед сдачей первой задачи.\n\nПосле этого создайте pull request, указав ваши имя и фамилию. Если вы делали задания в паре, укажите имена и фамилии обоих.\u003cbr/\u003e\nПоздравляю, вы великолепны. 👌 \n\n# Расписание\n\nНеделя | Дата   | Тема \n-------|--------|------\n1      | 27 фев | Введение в Haskell\n2      | 05 мар | Списки и строки\n3      | 12 мар | Лямбда-исчисление (untyped/stlc)\n4      | 19 мар | ADTs\n5      | 26 мар | Ленивость\n6      | 02 апр | 💤\n7      | 09 апр | Параметрический полиморфизм\n8      | 16 апр | Классы типов\n9      | 23 апр | Структуры данных\n10     | 30 апр | Монады IO и Random\n11     | 07 мая | Остальные монады\n12     | 14 мая | Трансформеры\n13     | 21 мая | Архитектура функциональных приложений\n14     | 28 мая | Type-level programming\n\n# Спонсоры\n\nКурс проводится при поддержке компании [Typeable](http://typeable.io) и компании [СКБ Контур](https://kontur.ru/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunfunfine%2Furfu-fp-intro-20","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffunfunfine%2Furfu-fp-intro-20","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffunfunfine%2Furfu-fp-intro-20/lists"}