Tato hodina je pouze opakovací, projdeme si témata, která byla již probírána v Úvodu do funkcionálního programování. Ty jsou výborně popsány v tutoriálu Naučte se Haskell!, do něhož můžete v případě zájmu nahlédnout:
Haskell podporuje dva základní styly psaní programu: deklarativní a expresivní. Při použití deklarativního stylu formulujeme algoritmus ve formě rovnic, které musí být splněny. V expresivním stylu skládáme složitější výrazy z jednodušších.
| Deklarativní styl | Expresivní styl | ||
|---|---|---|---|
| Pojmenovaná funkce | plus x y = x + y | Anonymní funkce | plus = \x y -> x + y |
| Konstrukce where | dbl 3where dbl x = x * x | Konstrukce let | let dbl x = x * xin dbl 3 |
| Vzory | f (x:xs) = x : f xsf _ = [] | Výraz case | f y = case y of(x:xs) -> x : f xs_ -> [] |
| Stráže | g x y| x > y = x| x < y = y| otherwise = 0 | Výraz if | g x y = if x > ythen xelse if x < ythen yelse 0 |
Styly můžeme libovolně kombinovat, ale některé prostředky jazyka se k sobě hodí více. Například stráže a konstrukce where:
quadraticEquation :: (Floating a, Ord a) => a -> a -> a -> (a, a)
quadraticEquation a b c
| discriminant > 0 = ((-b + sqrt discriminant) / (2 * a),
(-b - sqrt discriminant) / (2 * a))
| otherwise = error "No solution in R."
where discriminant = b^2 - 4 * a * c
V některých případech můžeme čitelnost kódu podstatně zlepšit použitím vhodnější konstrukce. Několik zajímavých informací k tomutu tématu naleznete v článku Haskell programming tips na HaskellWiki.