Funktory Flashcards
Aka je motivacia za funktormi?
Mame nejake funkcie, ale chceme ich pouzit na hodnoty v kontexte, napr Maybe. Chceme to spravit bez zbytocneho opakovania
Co robime s funkciou f :: a -> b?
Pozdvihneme (lift) na fm :: Maybe a -> Maybe b
Co nam staci zadefinovat pre Funktory?
fmap :: (a -> b) -> f a -> f b
Co robi <$ ?
a -> f b -> f a
Ake identity musi splnat fmap?
fmap id=id
fmap (f . g) = fmap f . fmap g
Co robi $>?
Functor f=>fb->a->fa
Ako piseme aj fmap?
<$>
Co robi void?
Functor f=>fa->f()
void x = () <$ x
Aka je motivacia za aplikativnymi funktormi?
potrebujeme aplikovať binárnu
funkciu na dve hodnoty uložené v kontexte Maybe
Aka je signatura <*>?
pre maybe konkretne
Maybe (a->b)->Maybe a->Maybe b
aplikuje funkciu v kontexte na hodnotu v kontexte
Preco spadne (++) <$> Just “AB” <$> Just “BA”?
Lebo (++) <$> Just “AB” je typu Maybe (String -> String)
Co musime implementovat pre aplikativne funktory?
pure, <*>
Co robi pure?
pure:: a->f a
vloží „čistú“ hodnotu do kontextu
Ake identity musi splnat pure a <*>?
pure id <> v = v
pure (.) <> u <> v <> w = u <> (v <> w)
pure f <> pure x = pure (f x)
u <> pure y = pure ($ y) <*> u
Co vyhodi ako vysledok [(+), ()] <> [1, 2] <*> [10, 20]?
[11,21,12,22,10,20,20,40]