module Data.Monoid.Monad.IO
( module System.IO
, module Data.Monoid.Reducer
, module Control.Monad
) where
import System.IO
import Data.Monoid.Reducer
import Control.Monad
import Control.Monad.ST
import Control.Concurrent.STM
instance Monoid m => Monoid (IO m) where
mempty = return mempty
mappend = liftM2 mappend
instance Monoid m => Reducer m (IO m) where
unit = return
instance Monoid m => Reducer (ST RealWorld m) (IO m) where
unit = stToIO
instance Monoid m => Reducer (STM m) (IO m) where
unit = atomically