If we have that MonadPlus m holds then you'd say m is a Monad, but m a (the type resulting from applying a to the type "function" m) is a monoid.
If we define (similar to Data.Monoid's definition, but we'll make use of this later)
class Semigroup a where (<>) :: a -> a -> a
class Semigroup a => Monoid a where zero :: a
then it has
mzero :: MonadPlus m => m a
mplus :: MonadPlus m => m a -> m a -> m a
with pretty comparable types and the apropriate laws
-- left and right identity
mplus a mzero == a
mplus mzero a == a
-- associativity
(a `mplus` b) `mplus` c == a `mplus` (b `mplus` c)
We can even define a Haskell Monoid if we use -XFlexibleInstances
{-# LANGUAGE FlexibleInstances #-}
instance MonadPlus m => Semigroup (m a) where (<>) = mplus
instance MonadPlus m => Monoid (m a) where zero = mzero
though these overlap badly with the instances in Data.Monoid, which is probably why it isn't a standard instance.
Another example of a monoid like this is Alternative m => m a from Control.Applicative.