Dear Haskellers,

are these monoids defined somewhere?

import Control.Applicative
import Data.Monoid

newtype AppMonoid m a = AppMonoid (m a)
instance (Monoid a, Applicative m) => Monoid (AppMonoid m a) where
    mempty = AppMonoid $ pure mempty
    mappend (AppMonoid x) (AppMonoid y) = AppMonoid $ mappend <$> x <*> y
-- With the () monoid for `a` this becames the monoid of effects.

newtype AltMonoid m a = AltMonoid (m a)
instance Alternative m => Monoid (AltMonoid m a) where
    mempty = AltMonoid empty
    mappend (AltMonoid x) (AltMonoid y) = AltMonoid $ x <|> y

(and similarly for Monad/MonadPlus, until they become subclasses of Applicative?)

Best regards,
Petr