#if __GLASGOW_HASKELL__ >= 702
#endif
#if __GLASGOW_HASKELL__ >= 706
#endif
module Data.Monoid.Compat (
Monoid(..),
(<>),
Dual(..),
Endo(..),
All(..),
Any(..),
Sum(..),
Product(..),
First(..),
Last(..),
Alt(..)
) where
import Data.Monoid as Base
import GHC.Generics.Compat ()
#if !MIN_VERSION_base(4,8,0)
import Control.Applicative
import Control.Monad
import Prelude.Compat
# if __GLASGOW_HASKELL__ >= 702
import GHC.Generics
# endif
#endif
#if !MIN_VERSION_base(4,5,0)
infixr 6 <>
(<>) :: Monoid m => m -> m -> m
(<>) = mappend
#endif
#if !MIN_VERSION_base(4,7,0)
deriving instance Num a => Num (Sum a)
deriving instance Num a => Num (Product a)
#endif
#if !MIN_VERSION_base(4,8,0)
newtype Alt f a = Alt {getAlt :: f a}
deriving ( Read, Show, Eq, Ord, Num, Enum
# if __GLASGOW_HASKELL__ >= 702
, Generic
# endif
# if __GLASGOW_HASKELL__ >= 708
, Generic1
# endif
)
deriving instance Functor f => Functor (Alt f)
deriving instance Applicative f => Applicative (Alt f)
deriving instance Monad m => Monad (Alt m)
deriving instance Alternative f => Alternative (Alt f)
deriving instance MonadPlus m => MonadPlus (Alt m)
instance Alternative f => Monoid (Alt f a) where
mempty = Alt empty
mappend (Alt x) (Alt y) = Alt (x <|> y)
#endif