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
- 230