module Data.Monoid.Instances where
import Control.Monad.Reader
import qualified Control.Monad.RWS.Lazy as LRWS
import qualified Control.Monad.RWS.Strict as SRWS
import qualified Control.Monad.State.Lazy as LState
import qualified Control.Monad.State.Strict as SState
import Control.Monad.Writer
import qualified Control.Monad.Writer.Strict as SWriter
import Data.String
import Data.Ratio
import Data.FingerTree
import Text.Parsec.Prim
instance (MonadPlus m, Monoid w) => Monoid (SWriter.WriterT w m n) where
mempty = mzero
mappend = mplus
instance (MonadPlus m, Monoid w) => Monoid (WriterT w m n) where
mempty = mzero
mappend = mplus
instance (MonadPlus m, Monoid w) => Monoid (SRWS.RWST r w s m n) where
mempty = mzero
mappend = mplus
instance (MonadPlus m, Monoid w) => Monoid (LRWS.RWST r w s m n) where
mempty = mzero
mappend = mplus
instance MonadPlus m => Monoid (ReaderT e m n) where
mempty = mzero
mappend = mplus
instance MonadPlus m => Monoid (SState.StateT s m n) where
mempty = mzero
mappend = mplus
instance MonadPlus m => Monoid (LState.StateT s m n) where
mempty = mzero
mappend = mplus
instance Measured v a => Monoid (FingerTree v a) where
mempty = empty
mappend = (><)
instance Stream s m t => Monoid (ParsecT s u m a) where
mempty = mzero
a `mappend` b = try a <|> b
instance (IsString a, IsString b) => IsString (a,b) where
fromString a = (fromString a, fromString a)
instance (IsString a, IsString b, IsString c) => IsString (a,b,c) where
fromString a = (fromString a, fromString a, fromString a)
instance (IsString a, IsString b, IsString c, IsString d) => IsString (a,b,c,d) where
fromString a = (fromString a, fromString a, fromString a, fromString a)
instance (IsString a, IsString b, IsString c, IsString d, IsString e) => IsString (a,b,c,d,e) where
fromString a = (fromString a, fromString a, fromString a, fromString a, fromString a)
instance Monoid Int where
mempty = 0
mappend = (+)
instance Monoid Integer where
mempty = 0
mappend = (+)
instance Integral m => Monoid (Ratio m) where
mempty = 0
mappend = (+)