NPRG068 Programování v Haskellu

ZS 2020/21, 2/0 Zk, 3 kredity

Kontakt

kratochvil@ksi.mff.cuni.cz

Distanční výuka

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

Záznamy z přednášek jsou k dispozici online. Pokud se k vám nedostal link, napište mi.

1 (30.9.)
Úvod do funkcionálního programování, syntax Haskellu, typy, Curry-style funkce.
2 (7.10.)
Typové třídy, monoidy, funktory, aplikativní funktory, motivace pro monády. Funkce jako kontejnery na výsledky. Tradiční monády pro State, pohled dovnitř IO.
3 (14.10.)
Monadický parsing trochu víc zblízka. Balíčky a knihovny, cabal.
4 (21.10.)
Klíčové části standardní knihovny. Kontejnery, související typové třídy, funkcionální datové struktury.
-- (28.10.)
Přednáška nebyla, protože zrovna vznikala republika.
5 (4.11.)
Lambda kalkulus a tradiční funkcionální triky, typovaný lambda kalkulus, Hindley-Milnerův systém, vnitřnosti GHC.
6 (11.11.)
Praktická ukázka toho jak něco ručně otypovat. Curry-Howardova korespondence. Mírný úvod do funkcionálních referencí.
7 (18.11.)
Funkcionální reference a.k.a. lensy, traversaly, zběžně iso, prism. Monádové transformery, užitečné monády ze standardní knihovny.
8 (25.11.)
Připomínka monádových transformerů (+ příklad). Stringologie a prettyprinting. Ve zbytku času jsme stihli něco o napojení GHC runtime na unix a konkurentní programování.
9 (2.12.)
Zbytek runtime věcí a konkurentního programování, paralelní programování, FFI.
10 (9.12.)
Několik metod jak generovat docela dobrou grafiku (Gloss, JuicyPixels, unboxed data). Jak debugovat a rozumně testovat Haskell (QuickCheck), benchmarking (criterion).
11 (12.12.)
Haskell vs. webové technologie (Scotty, Servant, Aeson, databázová API). Rychlý pohled na funkcionální generátory javaskriptu a reaktivní programování.

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