Infinite lists
fmap :: (a -> b) -> f a -> f bfmap (+3) (Just 2) -- Just 5
(+3) <$> Just 2 -- Just 5pure :: x -> a x
apply :: a (x -> y) -> a x -> a ypure 2 -- Just 2
apply (Just (+3)) (Just 2) -- Just 5
Just (+3) <*> Just 2 -- Just 5bind :: m a -> (a -> m b) -> m bhalf x = if even x then Just (x `div` 2) else Nothing
bind (Just 10) half -- Just 5
pure 40 >>= half >>= half >>= half -- ?
Division - Maybe Monad
IO Monad