module Data.Monoid.Multiplicative.Transformer ( module Data.Monoid.Multiplicative , Log(Log, getLog) , Exp(Exp, getExp) ) where import Data.Monoid.Multiplicative data Log m = Log { getLog :: m } instance MultiplicativeMonoid m => Monoid (Log m) where mempty = Log one Log a `mappend` Log b = Log (a `times` b) data Exp m = Exp { getExp :: m } instance Monoid m => MultiplicativeMonoid (Exp m) where one = Exp mempty Exp a `times` Exp b = Exp (a `mappend` b)