За да участвате в курса, е препоръчително да предприемете следните действия:
-
Да имате GitHub акаунт
-
Включване в Discord сървъра за основния курс чрез линка от мудъл
-
Следване на инструкциите описани в Discord канала
#насоки-и-правила
- Като подточка, трябва да изберете поне
Практикум
отChannels & Roles
. Целта на това е да мога да ви пращам известия и новини относно курса.
- Като подточка, трябва да изберете поне
-
Трябва да ми изпратите на лично съобщение или в Discord или по друг канал следните данни, по предпочитание форматирани по следния начин:
<фн>,<две имена на кирилица>,<github потребителско име>
Нужни са ми за да мога да формирам таблица с точки за всеки човек, както и да направя индивидуалните хранилища, които ще се използват за предаване и обратна връзка по домашните. (Няма да минават през скрипт или нещо, ама е хубаво да се придържаме към някакъв формат, все пак)
Пример за правилно изпратени данни:
62555,Павел Атанасов,reo101
Действията 0. и 3. са задължителни за участие в курса, но 1. и 2. са силно препоръчителни.
Практикумът споделя Discord сървър с главния курс по ФП.
Целите на сървъра са следните:
- Комуникация от моя страна към вас - обявления, пояснения
- Директна асинхронна чат комуникация с мен - "как да го направя това?" и подобни
- Комункация помежду ви - има канали в които могат да се случват дискусии свързани с курса (а и извън него)
В Discord можете да ме намерите под името Павел Атанасов
(reo101
).
Не се притеснявайте да ми пишете на лично съобщение при всякакви изникнали въпроси
- Mail -
[email protected]
- Discord -
@reo101
Курсът се взима с домашни и проект.
Домашните не са задължителни за завършването на курса, а проектът е.
Отбелязвам че имането на проект не гарантира взимането на предмета. Пример за кога би се случило това е ако не напишете нито едно домашно и изберете да правите проект, който дава минималния брой точки.
Домашните обикновено са между 3 и 7 на брой, като практиката ми показва че ми стига времето за 3-4.
Домашните ще се предават в лично github хранилище за всеки човек чрез pull request. (може и GitHub Classrooms да подкараме ако е достатъчно лесно)
Проектът, който правите, може да е споделен между практикума и главната дисциплина, стига той да е за поне n
точки, където n
се уточнява с мен и Трифон когато стане време за проекти.
Проектът се предава по същия начин както домашните - pull request във вашето хранилище в github, по който ви пиша обратна връзка.
В курса ще работим с версия 9.4.7
на Haskell-ският компилатор (ghc
). Съответно трябва когато инсталирате компилатора да внимавате да е 9.4.7
Инсрукции за как да си инсталирате най-важните Haskell-ски инструменти има в следващата секция.
Препоръчваният начин е да използвате ghcup
- инструмент за менежиране на инструменти свързани с Haskell.
На началната страница на ghcup
има едноредови инструкции за инсталирането на ghcup
, заедно с gif, демонстриращ как да го използвате, за да инсталирате инструменти.
Алтернативно можете да разгледате по-подробните инструкции за инсталиране на ghcup
.
След като го инсталирате, разгледайте инсрукциите за използване на ghcup
, но накратко
ghcup install ghc 9.4.7
ghcup install cabal-install
ghcup install haskell-language-server
Алтернативно, ако сте под Linux, можете да използвате ghcup tui
за да получите интерактивен текстов интърфейс (TUI) за работа с ghcup
.
След това, моля проверете дали работи всичко като изпълните командата ghci
в терминал. Би трябвало да видите нещо такова:
GHCi, version 9.4.7: https://www.haskell.org/ghc/ :? for help
Обърнете внимание на версията - трябва да е 9.4.7.
При спънки не се безпокойте да се свържете с мен.
Препоръчаният метод за работа с Haskell е VSCode, заедно с HLS разширението.
То включва много полезни функционалности - често срещани неща като "форматирай", "отиди на дефиниция", "какъв е типът на това", "оцени израз" и т.н.
Важно е да се отбележи, че докато работим с файл извън "проект" (което ще правим повечето време), е нужно да имаме инсталирано ghc
и да е в PATH
, за да работи HLS
Нямам против да ползвате <моя-любим-редактор> - аз ще ползвам nvim
докато ви показвам неща, като най-вероятно можете да си нагласите и HLS да работи с <моя-любим-редактор>. В такъв случай, можете лесно да се сдобиетe със HLS чрез ghcup
.
В курса ще форматираме кода си чрез ormolu
.
Най-лесният начин да постигнете това е използвайки разширението към редактора си.
За VSCode - след като имате Haskell разширението от миналата стъпка, би трябвало да е достатъчно да пуснете автоматичното форматиране при записване на файл (Format on Save) от VSCode настройките. След това, при всяко записване на файла с който работите, би следвало кодът ви да се форматира.
-
Донякъде плагиатствам от този курс
-
Книгата на която е базиран горният курс (и също я смятам за добър ресурс)
-
Силно препоръчително четиво свързано с
- как да ни се налага да мислим по-малко докато програмираме
- как да избягваме големи класове грешки с помощта на компилатора
- ключова начин на мислене в Haskell
- защо да програмираме на Haskell
-
Hoogle - търсене за хаскел функции (идентификатори) (и по типове!)
-
Hackage - търсене за хаскел пакети
-
Real World Haskell - практично насочена
Малко остаряла.
-
Специализирани ресурси:
- защо да правим
a -> Maybe b
, вместоa -> Bool
: - Програмиране с типове - Thinking with Types
- Паралелно и конкуретно програмиране - Parallel and Concurrent Programming in Haskell
- една от въведителните части е доста добра за добиване на по-добро разбиране над оценителния модел на Haskell
- Разглеждане на фундаментални типови класове - Typeclassopedia
- Разглеждане на различни интересни библиотеки/разшиерния на езика - 24 days of *
- Има много научни статии, които са доста лесно четими дори за начинаещи - ще споделям периодично някои.
- защо да правим
Съветвам ви директно да ме питате за повече ресурси ако ви интересува конкретна тема.