Unfortunately, no one can be told what a monad is.
You have to see it yourself. class Functor f where
fmap :: (a -> b) -> f a -> f b
class Functor m => Applicative m where
pure :: a -> ma
<*> :: m (a -> b) -> m a -> m b
class Applicative m => Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a
return = pure