{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

#if __GLASGOW_HASKELL__ >= 704
{-# LANGUAGE Safe #-}
#elif __GLASGOW_HASKELL__ >= 702
{-# LANGUAGE Trustworthy #-}
#endif

module Generics.Deriving.Monoid (module Generics.Deriving.Monoid.Internal) where

import Generics.Deriving.Monoid.Internal
import Generics.Deriving.Semigroup (GSemigroup(..))

#if MIN_VERSION_base(4,9,0)
import Data.Semigroup (WrappedMonoid)
#endif

instance GSemigroup a => GMonoid (Maybe a) where
  gmempty :: Maybe a
gmempty = forall a. Maybe a
Nothing
  gmappend :: Maybe a -> Maybe a -> Maybe a
gmappend = forall a. GSemigroup a => a -> a -> a
gsappend

#if MIN_VERSION_base(4,9,0)
instance GMonoid m => GMonoid (WrappedMonoid m) where
  gmempty :: WrappedMonoid m
gmempty  = forall a. (Generic a, GMonoid' (Rep a)) => a
gmemptydefault
  gmappend :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m
gmappend = forall a. (Generic a, GMonoid' (Rep a)) => a -> a -> a
gmappenddefault
#endif