maybe as functor and monad