    {-# 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 = Maybe a
    forall a. Maybe a
    Nothing
      gmappend :: Maybe a -> Maybe a -> Maybe a
    gmappend = Maybe a -> Maybe a -> Maybe a
    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  = WrappedMonoid m
    forall a. (Generic a, GMonoid' (Rep a)) => a
    gmemptydefault
      gmappend :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m
    gmappend = WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m
    forall a. (Generic a, GMonoid' (Rep a)) => a -> a -> a
    gmappenddefault
    #endif