monoid-transformer 0.0.2 → 0.0.3
raw patch · 6 files changed
+80/−2 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Monoid.Applicative: Cons :: f a -> T f a
+ Data.Monoid.Applicative: instance (Applicative f, Monoid a) => Monoid (T f a)
+ Data.Monoid.Applicative: instance Applicative f => C (T f)
+ Data.Monoid.Applicative: newtype T f a
+ Data.Monoid.Applicative: run :: T f a -> f a
+ Data.Monoid.Monad: Cons :: m a -> T m a
+ Data.Monoid.Monad: instance (Monad m, Monoid a) => Monoid (T m a)
+ Data.Monoid.Monad: instance Monad m => C (T m)
+ Data.Monoid.Monad: newtype T m a
+ Data.Monoid.Monad: run :: T m a -> m a
+ Data.Monoid.MonadicEndo: Cons :: (a -> m a) -> T m a
+ Data.Monoid.MonadicEndo: instance Monad m => Monoid (T m a)
+ Data.Monoid.MonadicEndo: newtype T m a
+ Data.Monoid.MonadicEndo: run :: T m a -> a -> m a
Files
- monoid-transformer.cabal +6/−2
- src/Data/Monoid/Applicative.hs +20/−0
- src/Data/Monoid/Monad.hs +22/−0
- src/Data/Monoid/MonadicEndo.hs +18/−0
- src/Data/Monoid/Reader.hs +7/−0
- src/Data/Monoid/State.hs +7/−0
monoid-transformer.cabal view
@@ -1,5 +1,5 @@ Name: monoid-transformer-Version: 0.0.2+Version: 0.0.3 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -14,6 +14,7 @@ There is no Writer transformer. It's vice versa: The Writer monad transforms a monoid to a monad. Tested-With: GHC==6.8.2+Tested-With: GHC==7.8.2 Cabal-Version: >=1.6 Build-Type: Simple @@ -24,7 +25,7 @@ Source-Repository this type: darcs location: http://code.haskell.org/~thielema/monoid/- tag: 0.0.2+ tag: 0.0.3 Library@@ -33,6 +34,9 @@ GHC-Options: -Wall Hs-Source-Dirs: src Exposed-Modules:+ Data.Monoid.Applicative+ Data.Monoid.Monad Data.Monoid.Reader Data.Monoid.State+ Data.Monoid.MonadicEndo Data.Monoid.Transformer
+ src/Data/Monoid/Applicative.hs view
@@ -0,0 +1,20 @@+module Data.Monoid.Applicative where++import qualified Data.Monoid.Transformer as MonoidTrans++import Control.Applicative (Applicative, pure, liftA2, )+import Data.Monoid (Monoid, mempty, mappend, )++{- |+Sequence applicative functors and combine their functorial results with 'mappend'.+-}+newtype T f a = Cons {run :: f a}+++instance (Applicative f, Monoid a) => Monoid (T f a) where+ mempty = Cons $ pure mempty+ mappend (Cons x) (Cons y) =+ Cons $ liftA2 mappend x y++instance (Applicative f) => MonoidTrans.C (T f) where+ lift = Cons . pure
+ src/Data/Monoid/Monad.hs view
@@ -0,0 +1,22 @@+module Data.Monoid.Monad where++import qualified Data.Monoid.Transformer as MonoidTrans++import Control.Monad (liftM2, )+import Data.Monoid (Monoid, mempty, mappend, )++{- |+Sequence actions and combine their monadic results with 'mappend'.++This type could be omitted, if 'Monad' would be a sub-class of 'Applicative'.+-}+newtype T m a = Cons {run :: m a}+++instance (Monad m, Monoid a) => Monoid (T m a) where+ mempty = Cons $ return mempty+ mappend (Cons x) (Cons y) =+ Cons $ liftM2 mappend x y++instance (Monad m) => MonoidTrans.C (T m) where+ lift = Cons . return
+ src/Data/Monoid/MonadicEndo.hs view
@@ -0,0 +1,18 @@+module Data.Monoid.MonadicEndo where++import Data.Monoid (Monoid, mempty, mappend, )++{- |+Like Data.Monoid.Endo but with monadic result.+'mempty' is 'return' and 'mappend' is '<=<'.++Useful e.g. for handling options with GetOpt.+-}+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) =+ Cons $ (x =<<) . y+-- Cons $ x <=< y
src/Data/Monoid/Reader.hs view
@@ -2,8 +2,15 @@ import qualified Data.Monoid.Transformer as MonoidTrans import Data.Monoid (Monoid, mempty, mappend, )+import Data.Functor (Functor, fmap, )+import Data.Function (const, ($), (.), ) +import Prelude () ++{- |+Could also be written as @Monoid.Applicative (Monad.Trans.Reader r) a@.+-} newtype T r a = Cons {run :: r -> a} pure :: a -> T r a
src/Data/Monoid/State.hs view
@@ -2,7 +2,12 @@ import qualified Data.Monoid.Transformer as MonoidTrans import Data.Monoid (Monoid, mempty, mappend, )+import Data.Functor (Functor, fmap, )+import Data.Function (const, ($), (.), )+import Data.Tuple (fst, snd, ) +import Prelude ()+ {- | This resembles the pure State monad. However, State in transformers is a StateT@@ -11,6 +16,8 @@ I hope I have the more natural parameter order for 'evaluate' in contrast to @mtl@ and @transformers@. However, it is different from the parameter order of 'run'.++Could also be written as @Monoid.Applicative (Monad.Trans.State s) a@. -} newtype T s a = Cons {run :: s -> (a,s)}