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

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):

Průběh přednášek

  1. (17.2.): Úvodní motivace, crash-course Haskellové syntaxe, typy funkcí.
  2. (24.2.): Typové třídy, monoidy, funktory, aplikativní funktory, monády a IO. Funkce jako kontejnery na výsledky.
  3. (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.
  4. (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).
  5. (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.
  6. (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ů

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.