[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 | |
|
| Instances | |
|
|
newtype KleisliEndo m a | Source |
|
Constructors | KleisliEndo | | getKleisliEndo :: a -> m a | |
|
| Instances | |
|
|
newtype MonoidAction m n | Source |
|
Constructors | | Instances | |
|
|
(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.Monad | getKleisliEndoData.Monoid.Monad |
getMonoidAction | Data.Monoid.Monad |
getMonoidTraversal | Data.Monoid.Applicative |
KleisliEndo |
1 (Type/Class) | Data.Monoid.Monad |
2 (Data Constructor) | Data.Monoid.Monad |
liftA2 | Data.Monoid.Applicative |
liftM2 | Data.Monoid.Monad |
|
MonoidAction |
1 (Type/Class) | Data.Monoid.Monad |
2 (Data Constructor) | Data.Monoid.Monad |
MonoidTraversal |
1 (Type/Class) | Data.Monoid.Applicative |
2 (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 ())
-
-
-
-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 ())
+
+
+
+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 ())
-
-
-
-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 ())
+
+
+
+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
}