NPRG068 Programování v Haskellu

ZS 2021/22, 2/0 Zk, 3 kredity

Distanční výuka

Forma výuky je prozatím prezenční, je ale možné, že formát semestru se přepne do distančního.

Požadavky

Přesná pravidla a termíny budou oznámeny na první přednášce a zaznamenány ve slajdech.

Slajdy

PDF

Slajdy budou průběžně (bez varování) doplňovány.

Nějaké kusy zdrojového kódu ze slajdů na hraní jdou najít tady.

Průběh přednášek

1 (30.9.)
Úvod do funkcionálního programování, syntax Haskellu, typy, Curry-style funkce, typové třídy, funktory. (ve slajdech cca do konce aplikativních funktorů, před první náznaky monád)
2 (7.10.)
Funkce jako kontejnery na výsledky. Typové třídy, monoidy, funktory, aplikativní funktory, motivace pro monády. Tradiční monády pro State, rychlý pohled dovnitř IO. (ve slajdech do konce úvodu, až k velkému středníku)
3 (14.10.)
Parsování pomocí monád (aka parsovací kombinátory). Balíčky a knihovny, cabal.
4 (21.10.)
Klíčové součásti standardní knihovny. Kontejnery, související typové třídy, funkcionální datové struktury.
5 (4.11.)
Lambda kalkulus a tradiční funkcionální triky, typovaný lambda kalkulus, Hindley-Milnerův systém, vnitřnosti GHC. Možná se stihne nástin Curry-Howardovy korespondence.
6 (11.11.)
Funkcionální reference a.k.a. lensy, traversaly, zběžně iso, prism. Funktorová van Laarhovenova konstrukce.
7 (18.11.)
Monádové transformery, užitečné monády ze standardní knihovny.
8 (25.11.)
Stringologie a prettyprinting. Napojení GHC runtime na unix, konkurentní programování, FFI.
9 (2.12.)
Několik metod jak generovat docela dobrou grafiku (Gloss, JuicyPixels, unboxed data). Jak debugovat a rozumně testovat Haskell (QuickCheck), benchmarking (criterion).
10 (9.12.)
Haskell vs. webové technologie (Scotty, Servant, Aeson, databázová API). Rychlý pohled na funkcionální generátory javaskriptu a reaktivní programování.
11 (16.12.)
Funkcionální návrhové vzory pro eDSL, interpretery a kompilátory.
Jedenáctá přednáška je poslední "oficiální", čas alokovaný pro přednášku 6.1.2022 můžeme podle domluvy věnovat něčemu užitečnému, např. diskuzi domácích úkolů nebo detailů některých témat z přednášek. Domluva proběhne na mattermostu.

Domácí úkoly

Zadání budou na GitHubu. Termíny jsou ve slajdech. Úkoly odevzdávejte do SISu, způsob odevzdání je popsaný ve slajdech i na GitHubu.

Zkouška

Zkouška bude probíhat jako rychlá kontrola obsahu domácích úkolů, případně jako doplnění chybějících částí. (V optimálním případě nebude potřeba doplňovat nic a zkouška bude velmi krátká.) Kontrolní a doplňující otázky se můžou týkat např. následujících témat:

  1. Typový systém Haskellu a typy metod základních typových tříd v Prelude, otázky podobné následujícím:
  2. Programování s funkcemi vyšších řádů a nekonečnými strukturami:
  3. Monády a povědomí o tom jak funguje standardní State a IO.
  4. Mírný přehled o standardních kontejnerech, běžných IO funkcích, fungování Haskellových threadů apod.
  5. Hrubý přehled o Curry-Howardově korespondenci typů a logiky.
  6. Fungování a hlavní myšlenky nejpoužívanějších knihoven, např.:

Literatura a užitečné odkazy

Jak začít rychle:

Reference:

Kompletnější materiály:

...