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

  • 79
Loading comments...

More from Jindřich Máca