Functor, Applicative, Monad instantiated