[added a couple more monoids for applicative and monad ekmett@gmail.com**20090325084732] { hunk ./Data/Monoid/Applicative.hs 7 + , MonoidTraversal(MonoidTraversal,getMonoidTraversal) hunk ./Data/Monoid/Applicative.hs 10 -import Control.Applicative (Applicative, (*>), pure, Alternative, empty, (<|>)) +import Control.Applicative (Applicative, (*>), pure, Alternative, empty, (<|>), liftA2) hunk ./Data/Monoid/Applicative.hs 41 +newtype MonoidTraversal m n = MonoidTraversal { getMonoidTraversal :: m n } + +instance (Applicative m, Monoid n) => Monoid (MonoidTraversal m n) where + mempty = MonoidTraversal (pure mempty) + MonoidTraversal a `mappend` MonoidTraversal b = MonoidTraversal (liftA2 mappend a b) + +instance (Applicative m, Monoid n) => Reducer (m n) (MonoidTraversal m n) where + unit = MonoidTraversal + + hunk ./Data/Monoid/Monad.hs 7 + , KleisliEndo(KleisliEndo,getKleisliEndo) + , MonoidAction(MonoidAction,getMonoidAction) hunk ./Data/Monoid/Monad.hs 12 -import Control.Monad (MonadPlus, mplus, mzero) +import Control.Monad (MonadPlus, mplus, mzero, (>=>), liftM2) hunk ./Data/Monoid/Monad.hs 39 - a `cons` MonadSum b = MonadSum (a `mplus` b) - MonadSum a `snoc` b = MonadSum (a `mplus` b) hunk ./Data/Monoid/Monad.hs 40 +newtype KleisliEndo m a = KleisliEndo { getKleisliEndo :: a -> m a } + +instance Monad m => Monoid (KleisliEndo m a) where + mempty = KleisliEndo return + KleisliEndo a `mappend` KleisliEndo b = KleisliEndo (a >=> b) + +instance Monad m => Reducer (a -> m a) (KleisliEndo m a) where + unit = KleisliEndo + +newtype MonoidAction m n = MonoidAction { getMonoidAction :: m n } + +instance (Monad m, Monoid n) => Monoid (MonoidAction m n) where + mempty = MonoidAction (return mempty) + MonoidAction a `mappend` MonoidAction b = MonoidAction (liftM2 mappend a b) + +instance (Monad m, Monoid n) => Reducer (m n) (MonoidAction m n) where + unit = MonoidAction hunk ./dist/doc/html/monoids/Data-Monoid-Applicative.html 349 +>
newtype MonoidTraversal m n Source
Constructors
MonoidTraversal
getMonoidTraversal :: m n
show/hide Instances
newtype KleisliEndo m a Source
Constructors
KleisliEndo
getKleisliEndo :: a -> m a
show/hide Instances
Monad m => Monoid (KleisliEndo m a)
Monad m => Reducer (a -> m a) (KleisliEndo m a)
newtype MonoidAction m n Source
Constructors
MonoidAction
getMonoidAction :: m n
show/hide Instances
(Monad m, Monoid n) => Reducer (m n) (MonoidAction m n)
(Monad m, Monoid n) => Monoid (MonoidAction m n)
(Monad m, Monoid n) => Reducer (m n) (MonoidAction m n)(Applicative m, Monoid n) => Reducer (m n) (MonoidTraversal m n)Monad m => Reducer (a -> m a) (KleisliEndo m a)Monad m => Reducer (a -> m a) (KleisliEndo m a)>=>Data.Monoid.MonadgetKleisliEndoData.Monoid.MonadgetMonoidActionData.Monoid.MonadgetMonoidTraversalData.Monoid.ApplicativeKleisliEndo1 (Type/Class)Data.Monoid.Monad2 (Data Constructor)Data.Monoid.MonadliftA2Data.Monoid.ApplicativeliftM2Data.Monoid.MonadMonoidAction1 (Type/Class)Data.Monoid.Monad2 (Data Constructor)Data.Monoid.MonadMonoidTraversal1 (Type/Class)Data.Monoid.Applicative2 (Data Constructor)Data.Monoid.Applicative ) where - -import Control.Applicative (Applicative, (*>), pure, Alternative, empty, (<|>)) -import Data.Monoid.Reducer - -newtype Traversal f = Traversal { getTraversal :: f () } - -instance Applicative f => Monoid (Traversal f) where - mempty = Traversal (pure ()) - Traversal a `mappend` Traversal b = Traversal (a *> b) - -instance Applicative f => Reducer (f a) (Traversal f) where - unit a = Traversal (a *> pure ()) - a `cons` Traversal b = Traversal (a *> b) - Traversal a `snoc` b = Traversal (a *> b *> pure ()) - -{-# RULES "unitTraversal" unit = Traversal #-} -{-# RULES "snocTraversal" snoc = snocTraversal #-} -snocTraversal :: Reducer (f ()) (Traversal f) => Traversal f -> f () -> Traversal f -snocTraversal a = mappend a . Traversal - -newtype Alternate f a = Alternate { getAlternate :: f a } - deriving (Eq,Ord,Show,Read,Functor,Applicative,Alternative) - -instance Alternative f => Monoid (Alternate f a) where - mempty = empty - Alternate a `mappend` Alternate b = Alternate (a <|> b) - -instance Alternative f => Reducer (f a) (Alternate f a) where - unit = Alternate - a `cons` Alternate b = Alternate (a <|> b) - Alternate a `snoc` b = Alternate (a <|> b) + , MonoidTraversal(MonoidTraversal,getMonoidTraversal) + ) where + +import Control.Applicative (Applicative, (*>), pure, Alternative, empty, (<|>), liftA2) +import Data.Monoid.Reducer + +newtype Traversal f = Traversal { getTraversal :: f () } + +instance Applicative f => Monoid (Traversal f) where + mempty = Traversal (pure ()) + Traversal a `mappend` Traversal b = Traversal (a *> b) + +instance Applicative f => Reducer (f a) (Traversal f) where + unit a = Traversal (a *> pure ()) + a `cons` Traversal b = Traversal (a *> b) + Traversal a `snoc` b = Traversal (a *> b *> pure ()) + +{-# RULES "unitTraversal" unit = Traversal #-} +{-# RULES "snocTraversal" snoc = snocTraversal #-} +snocTraversal :: Reducer (f ()) (Traversal f) => Traversal f -> f () -> Traversal f +snocTraversal a = mappend a . Traversal + +newtype Alternate f a = Alternate { getAlternate :: f a } + deriving (Eq,Ord,Show,Read,Functor,Applicative,Alternative) + +instance Alternative f => Monoid (Alternate f a) where + mempty = empty + Alternate a `mappend` Alternate b = Alternate (a <|> b) + +instance Alternative f => Reducer (f a) (Alternate f a) where + unit = Alternate + a `cons` Alternate b = Alternate (a <|> b) + Alternate a `snoc` b = Alternate (a <|> b) + +newtype MonoidTraversal m n = MonoidTraversal { getMonoidTraversal :: m n } + +instance (Applicative m, Monoid n) => Monoid (MonoidTraversal m n) where + mempty = MonoidTraversal (pure mempty) + MonoidTraversal a `mappend` MonoidTraversal b = MonoidTraversal (liftA2 mappend a b) + +instance (Applicative m, Monoid n) => Reducer (m n) (MonoidTraversal m n) where + unit = MonoidTraversal + hunk ./dist/doc/html/monoids/src/Data-Monoid-Monad.html 15 - ) where - -import Data.Monoid.Reducer -import Control.Monad (MonadPlus, mplus, mzero) - -newtype Action m = Action { getAction :: m () } + , KleisliEndo(KleisliEndo,getKleisliEndo) + , MonoidAction(MonoidAction,getMonoidAction) + ) where + +import Data.Monoid.Reducer +import Control.Monad (MonadPlus, mplus, mzero, (>=>), liftM2) hunk ./dist/doc/html/monoids/src/Data-Monoid-Monad.html 22 -instance Monad m => Monoid (Action m) where - mempty = Action (return ()) - Action a `mappend` Action b = Action (a >> b) - -instance Monad m => Reducer (m a) (Action m) where - unit a = Action (a >> return ()) - a `cons` Action b = Action (a >> b) - Action a `snoc` b = Action (a >> b >> return ()) - -{-# RULES "unitAction" unit = Action #-} -{-# RULES "snocAction" snoc = snocAction #-} -snocAction :: Reducer (m ()) (Action m) => Action m -> m () -> Action m -snocAction a = mappend a . Action - -newtype MonadSum m a = MonadSum { getMonadSum :: m a } - deriving (Eq,Ord,Show,Read,Functor,Monad,MonadPlus) - -instance MonadPlus m => Monoid (MonadSum m a) where - mempty = MonadSum mzero - MonadSum a `mappend` MonadSum b = MonadSum (a `mplus` b) - -instance MonadPlus m => Reducer (m a) (MonadSum m a) where - unit = MonadSum - a `cons` MonadSum b = MonadSum (a `mplus` b) - MonadSum a `snoc` b = MonadSum (a `mplus` b) +newtype Action m = Action { getAction :: m () } + +instance Monad m => Monoid (Action m) where + mempty = Action (return ()) + Action a `mappend` Action b = Action (a >> b) + +instance Monad m => Reducer (m a) (Action m) where + unit a = Action (a >> return ()) + a `cons` Action b = Action (a >> b) + Action a `snoc` b = Action (a >> b >> return ()) + +{-# RULES "unitAction" unit = Action #-} +{-# RULES "snocAction" snoc = snocAction #-} +snocAction :: Reducer (m ()) (Action m) => Action m -> m () -> Action m +snocAction a = mappend a . Action + +newtype MonadSum m a = MonadSum { getMonadSum :: m a } + deriving (Eq,Ord,Show,Read,Functor,Monad,MonadPlus) + +instance MonadPlus m => Monoid (MonadSum m a) where + mempty = MonadSum mzero + MonadSum a `mappend` MonadSum b = MonadSum (a `mplus` b) + +instance MonadPlus m => Reducer (m a) (MonadSum m a) where + unit = MonadSum hunk ./dist/doc/html/monoids/src/Data-Monoid-Monad.html 48 +newtype KleisliEndo m a = KleisliEndo { getKleisliEndo :: a -> m a } + +instance Monad m => Monoid (KleisliEndo m a) where + mempty = KleisliEndo return + KleisliEndo a `mappend` KleisliEndo b = KleisliEndo (a >=> b) + +instance Monad m => Reducer (a -> m a) (KleisliEndo m a) where + unit = KleisliEndo + +newtype MonoidAction m n = MonoidAction { getMonoidAction :: m n } + +instance (Monad m, Monoid n) => Monoid (MonoidAction m n) where + mempty = MonoidAction (return mempty) + MonoidAction a `mappend` MonoidAction b = MonoidAction (liftM2 mappend a b) + +instance (Monad m, Monoid n) => Reducer (m n) (MonoidAction m n) where + unit = MonoidAction }