Understand Functor, Applicative and Monad