I\'ve always enjoyed the following intuitive explanation of a monad\'s power relative to a functor: a monad can change shape; a functor cannot.
For example: length
This isn't a full answer, but I have a few things to say about your question that don't really fit into a comment.
Firstly, Monad
and Functor
are typeclasses; they classify types. So it is odd to say that "a monad can change shape; a functor cannot." I believe what you are trying to talk about is a "Monadic value" or perhaps a "monadic action": a value whose type is m a
for some Monad m
of kind * -> *
and some other type of kind *
. I'm not entirely sure what to call Functor f :: f a
, I suppose I'd call it a "value in a functor", though that's not the best description of, say, IO String
(IO
is a functor).
Secondly, note that all Monads are necessarily Functors (fmap = liftM
), so I'd say the difference you observe is between fmap
and >>=
, or even between f
and g
, rather than between Monad
and Functor
.