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