Functor, Applicative, and Monad