IB016 Seminář z funkcionálního programování

Fakulta informatiky
jaro 2021
Rozsah
0/2/0. 2 kr. (plus ukončení). Ukončení: z.
Vyučující
Mgr. et Mgr. Vladimír Chlup (přednášející)
Mgr. Adam Matoušek (přednášející)
RNDr. Vladimír Štill, Ph.D. (přednášející)
Mgr. Martin Kurečka (pomocník)
Garance
RNDr. Vladimír Štill, Ph.D.
Katedra teorie programování – Fakulta informatiky
Dodavatelské pracoviště: Katedra teorie programování – Fakulta informatiky
Rozvrh
St 8:00–9:50 Virtuální místnost
  • Rozvrh seminárních/paralelních skupin:
IB016/virtual: Rozvrh nebyl do ISu vložen. V. Chlup, A. Matoušek, V. Štill, (Z technických důvodů potřebujeme mít v ISu seminární skupinu)
Předpoklady
IB015 Neimperativní programování
Pro zapsání do kursu stačí mít znalost Haskellu v rozsahu předmětu IB015 Neimperativní programování a kladný vztah k funkcionálnímu programování.
Omezení zápisu do předmětu
Předmět je nabízen i studentům mimo mateřské obory.
Předmět si smí zapsat nejvýše 36 stud.
Momentální stav registrace a zápisu: zapsáno: 2/36, pouze zareg.: 0/36, pouze zareg. s předností (mateřské obory): 0/36
Mateřské obory/plány
předmět má 68 mateřských oborů, zobrazit
Cíle předmětu
Studenti předmětu si podstatně rozšíří své znalosti funkcionálního programování. Po absolvování kursu by měli být schopni řešit netriviální programátorské problémy s pomocí Haskellu a získat přehled o praktických využitích tohoto funkcionálního jazyka.
Výstupy z učení
Student bude po absolvování předmětu schopen:
— napsat pokročilejší Haskellový program o cca 100 až 200 řádcích;
— zadaný problém analyzovat a vhodně funkcionálně dekomponovat;
— používat podpůrné nástroje pro vývoj v Haskellu, jako je správce balíků Cabal, repositář balíků Hackage, linter HLint a testovací framework QuickCheck;
— dokázat popsat teoretické funkcionální koncepty;
— mít představu o některých pokročilejších funkcionálních technikách používaných v praxi.
Osnova
  • Pokročilá syntaxe, systém modulů, vlastní typové třídy, pokročilé datové struktury.
  • Systém balíčků (Hackage/Stackage), podpůrné nástroje (Cabal, HLint, Haddock).
  • Funktory, aplikativní funktory, monády.
  • Automatické generování testů dle specifikace (QuickCheck).
  • Vstup a výstup v Haskellu, zpracování chyb a výjimek (Maybe, Either, výjimky, chybové stavy).
  • Pologrupy, monoidy, třídy Foldable a Traversable.
  • Vyhodnocovací strategie (lenost vs. striktnost).
  • Pokročilé techniky procházení datových struktur (Zippers, Lens).
  • Monadické parsování (Parsec).
  • Monády pro sdílený zápis, čtení a udržování stavu (Writer, Reader, State).
  • Transformátory monád (MaybeT, ErrorT).
  • Práce s řetězci a další užitečná rozšíření v GHC.
  • Využití Haskellu v praxi.
Literatura
  • LIPOVAČA, Miran. Learn You a Haskell for Great Good!: A Beginner's Guide. First Edition. San Francisco, CA, USA: No Starch Press, 2011, 400 s. ISBN 978-1-59327-283-8. URL info
  • O'SULLIVAN, Bryan, John GOERZEN a Don STEWART. Real World Haskell. First Edition. O'Reilly Media, Inc., 2009, 670 s. ISBN 978-0-596-51498-3. URL info
Záložky
https://is.muni.cz/ln/tag/FI:IB016!
Výukové metody
Cvičení kombinující výklad a samostatné programování; domácí úlohy.
Metody hodnocení
Podmínkou pro získání zápočtu je získání dostatečného množství bodů z domácích úloh. Účast na cvičeních je nepovinná, ale důrazně doporučená.
Navazující předměty
Informace učitele
https://is.muni.cz/auth/el/1433/jaro2020/IB016/index.qwarp
Další komentáře
Studijní materiály
Předmět je vyučován každoročně.
Předmět je zařazen také v obdobích jaro 2010, jaro 2011, jaro 2012, jaro 2013, jaro 2015, jaro 2016, jaro 2017, jaro 2018, jaro 2019, jaro 2020, jaro 2022, jaro 2023, jaro 2024, jaro 2025.