f :: a -> m b
f :: a -> Maybe b -- m = Maybe
f :: a -> [] b -- m = []
f :: a -> (Either s) b -- m = Either s
f :: a -> ((,) s) b -- m = ((,) s)
f :: a -> ((->) e) b -- m = ((->) e)
f :: a -> (State s) b -- m = State s
f :: a -> IO b -- m = IO
class Applicative m => Monad (m :: * -> *) where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
x >> y = x >>= (\_ -> y)
fail :: String -> m a
return a >>= k == k a
m >>= return == m
(m >>= k) >>= k' == m >>= (k >>= k') -- m >>= (\x -> k x >>= k')
- Денис Николаевич Москвин - twitter @deniok
- Функциональное программирование на языке Haskell - Часть 1 (see also: Certificate, Solutions) - stepik.org
- Функциональное программирование (Практические задания) - youtube.com