{-# LANGUAGE Safe #-}
{-# OPTIONS_GHC -Wno-orphans #-}

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

import Data.Semigroup (WrappedMonoid)

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

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

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