NPRG068 Programování v Haskellu (2025/26)
Praktický kurz o programování realistického software ve vysokoúrovňovém striktně typovaném líném funkcionálním jazyce.
Kontakt
-
miroslav.kratochvil@matfyz.cuni.cz — vhodné na administrativní/studijní záležitosti a na ne-technické potíže s domácími úkoly
-
mirek.kratochvil na Mattermostu MFF, kanál #nprg068-haskell
(invite link je v SISu, dostupný po přihlášení k rozvrhu) — vhodné na otázky a diskuzi problémů s domácími úkoly a obecně s Haskellem
Rozvrh
Úterý 12:20 v S6, MS
Odkazy
Materiály
Slajdy budu zveřejňovat v průběhu semestru (viz níže u přednášek).
Vhodné materiály k přípravě na zkoušku (100% pochopení prakticky zaručuje úspěch):
-
Learn You A Haskell (komunitní edice)
(Vpravo dole klikněte na "read online".)
-
Typing Haskell In Haskell (aka THIH)
je malá implementace typového systému Haskellu rámcově kompatibilní se standardem Haskell98;
inferenci typových tříd stačí znát povrchně jako intuici na přibližných definicích,
inferenci vnořených funkcí (a context splitting) není potřeba znát vůbec.
Zdrojový kód na hraní je v balíku thih.
Případně můžete prozkoumat jednodušší (a dostatečnou) verzi
minihm.
Průběh přednášek
-
(17.2.): Úvodní motivace, crash-course Haskellové syntaxe, typy funkcí.
-
(24.2.): Typové třídy, monoidy, funktory, aplikativní funktory, monády a IO. Funkce jako kontejnery na výsledky.
-
(3.3.): Typové třídy a monády znova (z druhé strany). Konkrétní příklad použití monád na parsovacích kombinátorech.
-
(10.3.): Krátká poznámka o tom jak přesně se liší Monad a Applicative (můžou akce záviset na mezivýsledcích?).
Přehled Prelude: IO, ošetřování chyb, bracket, tooling pro práci s monádami.
Kontejnerové typové třídy (Foldable jako "const iterátor", Traversable jako "mutable iterátor s efektem").
Maybe, Either, seznamy, Monoidní pomůcky na foldování, Sequence, Tree, Graph, Map, Set.
Příklady pár funkcionáních datových struktur (refill fronta, zipper seznam a strom, finger tree).
-
(17.3.):
Vnitřnosti GHC: Lambda kalkulus, STLC, inference řešením rovnic.
Polymorfismus pomocí (∀) v typech, Hindley-Milnerův systém.
Základní transformace v Core mezijazyku (lifting, CPS konverze).
Jak funguje STG (velmi zhruba).
Curry-Howardova korespondence STLC typů a výroků konstruktivní logiky.
Poznámka o parametricitě a souvisejících vlastnostech.
-
(24.3.):
Stringy (bajtové stringy a Text). Pretty-printing z "pretty AST". Poznámka o pandocu.
Transformery monád. Přehled užitečných konstrukcí (kombinace WriterT/ReaderT/StateT/MaybeT, poznámka o LogicT, ContT triky).
Poznámka o type-level výpočtech pomocí víceparametrových typových tříd (MPTCs) a typových rodin (type families, data families).
Domácí úkoly
Zadání domácích úkolů jsou k dispozici v GitLabu gitlab.mff.cuni.cz/teaching/nprg068/homeworks26.
Termíny odevzdání úkolů jsou v SISu v grupíku (tj. "studijních mezivýsledcích") u odpovídajících políček na odevzdávání souborů, a navíc přepsané níže v sekci "Termíny odevzdání".
Úkoly jsou hlavní "zdroj" výsledného hodnocení.
Úkoly proto odevzdávejte včas.
V případě ohrožení termínu mi napište s dostatečným předstihem (tj. ideálně alespoň 12 hodin před termínem).
V případě neomluveného a neopodstatněného promeškání termínu odevzdání úkolu student automaticky ztrácí nárok na dokončení předmětu v tomto semestru.
Termíny odevzdání úkolů
-
Úkol 0:
Nepovinný tj. technicky bez termínu, ale k úkolům odevzdaným po 15.3.2026 nebudu posílat feedback.
-
Úkol 1:
31.3.2025
-
Úkol 2:
30.4.2025
English-speaking students
We expect to give all lectures in Czech by default, but we will switch to English on demand in case there are English-speaking students present.
(Ideally please let us know in advance.)
All other study materials (perhaps with the exception of the site info above, which is mirrored in SIS and slides) are in English.
Please use some of the free available automated-translation tools if required, or ask for a consultation in case of questions or problems.