{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-} 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