monoids-0.1.2: Data/Monoid/Monad/State/Strict.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
module Data.Monoid.Monad.State.Strict
( module Control.Monad.State.Strict
, module Data.Monoid.Reducer
) where
import Control.Monad.State.Strict
import Data.Monoid.Reducer
instance Monoid m => Monoid (State s m) where
mempty = return mempty
mappend = liftM2 mappend
instance (Monad m, Monoid n) => Monoid (StateT s m n) where
mempty = return mempty
mappend = liftM2 mappend
instance Monoid m => Reducer m (State s m) where
unit = return
instance (Monad m, Monoid n) => Reducer n (StateT s m n) where
unit = return
instance (Monad m, Monoid n) => Reducer (m n) (StateT s m n) where
unit = lift