monoid-transformer 0.0.3 → 0.0.4
raw patch · 6 files changed
+32/−6 lines, 6 filesdep +semigroups
Dependencies added: semigroups
Files
- monoid-transformer.cabal +5/−3
- src/Data/Monoid/Applicative.hs +4/−0
- src/Data/Monoid/Monad.hs +4/−0
- src/Data/Monoid/MonadicEndo.hs +7/−3
- src/Data/Monoid/Reader.hs +4/−0
- src/Data/Monoid/State.hs +8/−0
monoid-transformer.cabal view
@@ -1,5 +1,5 @@ Name: monoid-transformer-Version: 0.0.3+Version: 0.0.4 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -25,11 +25,13 @@ Source-Repository this type: darcs location: http://code.haskell.org/~thielema/monoid/- tag: 0.0.3+ tag: 0.0.4 Library- Build-Depends: base >= 1 && <5+ Build-Depends:+ semigroups >=0.1 && <1.0,+ base >= 1 && <5 GHC-Options: -Wall Hs-Source-Dirs: src
src/Data/Monoid/Applicative.hs view
@@ -4,12 +4,16 @@ import Control.Applicative (Applicative, pure, liftA2, ) import Data.Monoid (Monoid, mempty, mappend, )+import Data.Semigroup (Semigroup, (<>), ) {- | Sequence applicative functors and combine their functorial results with 'mappend'. -} newtype T f a = Cons {run :: f a} ++instance (Applicative f, Semigroup a) => Semigroup (T f a) where+ Cons x <> Cons y = Cons $ liftA2 (<>) x y instance (Applicative f, Monoid a) => Monoid (T f a) where mempty = Cons $ pure mempty
src/Data/Monoid/Monad.hs view
@@ -4,6 +4,7 @@ import Control.Monad (liftM2, ) import Data.Monoid (Monoid, mempty, mappend, )+import Data.Semigroup (Semigroup, (<>), ) {- | Sequence actions and combine their monadic results with 'mappend'.@@ -12,6 +13,9 @@ -} newtype T m a = Cons {run :: m a} ++instance (Monad m, Semigroup a) => Semigroup (T m a) where+ Cons x <> Cons y = Cons $ liftM2 (<>) x y instance (Monad m, Monoid a) => Monoid (T m a) where mempty = Cons $ return mempty
src/Data/Monoid/MonadicEndo.hs view
@@ -1,6 +1,7 @@ module Data.Monoid.MonadicEndo where import Data.Monoid (Monoid, mempty, mappend, )+import Data.Semigroup (Semigroup, (<>), ) {- | Like Data.Monoid.Endo but with monadic result.@@ -11,8 +12,11 @@ newtype T m a = Cons {run :: a -> m a} -instance Monad m => Monoid (T m a) where- mempty = Cons return- mappend (Cons x) (Cons y) =+instance Monad m => Semigroup (T m a) where+ Cons x <> Cons y = Cons $ (x =<<) . y -- Cons $ x <=< y++instance Monad m => Monoid (T m a) where+ mempty = Cons return+ mappend = (<>)
src/Data/Monoid/Reader.hs view
@@ -2,6 +2,7 @@ import qualified Data.Monoid.Transformer as MonoidTrans import Data.Monoid (Monoid, mempty, mappend, )+import Data.Semigroup (Semigroup, (<>), ) import Data.Functor (Functor, fmap, ) import Data.Function (const, ($), (.), ) @@ -15,6 +16,9 @@ pure :: a -> T r a pure = Cons . const++instance Semigroup a => Semigroup (T r a) where+ Cons x <> Cons y = Cons $ \r -> x r <> y r instance Monoid a => Monoid (T r a) where mempty = MonoidTrans.lift mempty
src/Data/Monoid/State.hs view
@@ -2,6 +2,7 @@ import qualified Data.Monoid.Transformer as MonoidTrans import Data.Monoid (Monoid, mempty, mappend, )+import Data.Semigroup (Semigroup, (<>), ) import Data.Functor (Functor, fmap, ) import Data.Function (const, ($), (.), ) import Data.Tuple (fst, snd, )@@ -38,6 +39,13 @@ modify :: Monoid a => (s -> s) -> T s a modify f = Cons $ \s -> (mempty, f s) ++instance Semigroup a => Semigroup (T s a) where+ Cons x <> Cons y =+ Cons $ \s0 ->+ let (xr,s1) = x s0+ (yr,s2) = y s1+ in (xr<>yr, s2) instance Monoid a => Monoid (T s a) where mempty = MonoidTrans.lift mempty