Monad
?
Osnova - Monad
-
Odkud pochází?
-
Co řeší za problém?
-
Jak funguje?
-
Závěr
Odkud pochází?
Historie datových typů
-
Jaké dnes známe a používáme datové typy?
-
Odkud pochází?
-
Proč nás to zajímá?
DEMO TIME
Infinite lists
Rozdělení funkcionálních jazyků
Category theory (Teorie kategorií)
-
Pochází z matematické algebry
-
Různé funkcionální jazyky ji implementují jinak
Category theory - JavaScript
Category theory - PureScript
Category theory - Haskell
Co řeší za problém?
S čím se pracuje lépe, s jednou hodnotou nebo polem hodnot?
Představa programu ve FP
-
"Flow" dat ze vstupu na výstup
-
HTTP Request a Response
-
Uživatelská akce a reakce
Jak funguje?
Funktor - "Mappable"
Stačí implementovat funkci fmap (<$>)
fmap :: (a -> b) -> f a -> f b
fmap (+3) (Just 2) -- Just 5
(+3) <$> Just 2 -- Just 5
Applicative - "Lifter"
-
Je potřeba být Functor
-
A implementovat funkce pure a apply (<*>)
pure :: x -> a x
apply :: a (x -> y) -> a x -> a y
pure 2 -- Just 2
apply (Just (+3)) (Just 2) -- Just 5
Just (+3) <*> Just 2 -- Just 5
Monad - "Side Effector"
-
Je potřeba být Applicative
-
A potom implementovat funkci bind (>>=)
bind :: m a -> (a -> m b) -> m b
half x = if even x then Just (x `div` 2) else Nothing
bind (Just 10) half -- Just 5
pure 40 >>= half >>= half >>= half -- ?
a.k.a chaining continuation
Monad - "Side Effector"
DEMO TIME
Division - Maybe Monad
DEMO TIME
IO Monad
Závěr
-
Všichni vědí co je Monad?!
-
Možnosti v TS např. fp-ts
-
Další příklady pro zájemce z AoC...
Diskuze
Monad
By Jindřich Máca
Monad
- 495