monoid-transformer-0.0.3: src/Data/Monoid/Applicative.hs
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