module Data.Monoid.Reader where

import qualified Data.Monoid.Transformer as MonoidTrans
import Data.Monoid (Monoid, mempty, mappend, )


newtype T r a = Cons {run :: r -> a}

instance Monoid a => Monoid (T r a) where
   mempty = MonoidTrans.lift mempty
   mappend (Cons x) (Cons y) =
      Cons $ \r -> mappend (x r) (y r)

instance MonoidTrans.C (T r) where
   lift = Cons . const