Monady Flashcards
Aka je motivacia za monadami?
slide 1,2
Potrebujeme špeciálne skladanie viachodnotových funkcií.
Ako prebieha vypocet pri motvacii za monadami?
- aplikovaním vnútornej funkcie g :: a → [b] na x :: a získame [b]
- na prvky [b] aplikujeme f :: b → [c], čím získame [[c]]
- zoznam zoznamov vyrovnáme (flatten) funkciou concat
Co je este motivacia za monadami?
Rozsirenie o testovacie vypisy, ktore vieme skladat
slide 4,5
Co je to fish operator?
<=<
(<=<) :: (b->(String,c))->(a->(String,b))->a->(String,c)
Co treba definovat pre monadu?
> > =
Co je to»_space;=?
m a->(a->m b)->m b
hod. v kont. odovzdá funkcii vracajúcej hod. v kont.
Co robi»_space;?
m a->m b->m b
Co robi return?
vloží „čistú“ hodnotu do kontextu
Ake identity musi splnat implementacia return a»_space;=?
- return a»_space;= k = k a
- m»_space;= return=m
- m»_space;= (\x -> k x»_space;= h) = (m»_space;= k)»_space;= h
Co je to do notacia?
do {e} = e
do {e; stmts} = e»_space; do {stmts}
do {p ← e; stmts} = e»_space;= λp → do {stmts}
Aky je suvis do notacie s mnozinovou notaciou?
slide 9
Ako vieme implementovat if pomocou monad, aplikativnych funktorov?
slide 10,11
Co vieme spravit pomocou monad ale nie pomocou aplikativnych funktorov?
slide 13
Porovnaj funkcie, zdroje a ciel pri porovnani apl. fun, fun a monad
slide 14
Smerom od funktorov k monádam získavame …
silnejšie rozhranie a
flexibilnejšiu kontrolu nad výsledkom, za cenu:
* menších záruk o výsledku,
* menšieho počtu inštancií.
Co je to hodnota?
čistá (strohá) hodnota (napr. a)
Co je to kontext?
zaobaľuje čisté hodnoty (napr. f z f a)
Co je to funktorova hodnota?
hodnota zabalená v kontexte (napr. f a)
Kedy pouzit funktor?
Typ funkcie fmap zaručuje, že nemôže zmeniť tvar kontextu nech je funkcia g : a → b akákoľvek, pretože tá nevie nič o kontexte.
fmap g [1..10] vždy vráti desaťprvkový zoznam
Kedy pouzit aplikativny funktor?
Funkcia (⟨∗⟩) môže meniť tvar kontextu pretože ako funkcie f (a → b), tak aj hodnoty f a sú vo svojom vlastnom kontexte. Vo vnútry kontextu f sú však čisté funkcie a → b a tieto nemôžu meniť kontext. Preto výsledný kontext je úplne určený kontextom argumentov a nazávisí od hodnôt v týchto kontextoch.
Kedy pouzit monady?
Funkcia =«_space;môže meniť tvar výsledného kontextu podľa vstupných hodnôt, pretože funkcia je typu a → f b a teda môže vytvoriť vlastný kontext z hodnoty.
vysveti ze monada je aplikativny funktor
slide 17
vysvetli ze aplikativny funktor je funktor
fmap f x = pure f <*> x