{-# LANGUAGE ConstraintKinds      #-}
{-# LANGUAGE CPP                  #-}
{-# LANGUAGE FlexibleInstances    #-}
{-# LANGUAGE UndecidableInstances #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Monoid.WithSemigroup
-- Copyright   :  (c) 2011 diagrams-core team (see LICENSE)
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  diagrams-discuss@googlegroups.com
--
-- Convenience alias for the combination of @Monoid@ and @Semigroup@ constraints.
--
-----------------------------------------------------------------------------

module Data.Monoid.WithSemigroup
       ( Monoid'
       ) where

import           Data.Semigroup

-- | For base < 4.11, the @Monoid'@ constraint is a synonym for things
--   which are instances of both 'Semigroup' and 'Monoid'.  For base
--   version 4.11 and onwards, @Monoid@ has @Semigroup@ as a
--   superclass already, so for backwards compatibility @Monoid'@ is
--   provided as a synonym for @Monoid@.
#if MIN_VERSION_base(4,11,0)
type Monoid' = Monoid
#else
type Monoid' m = (Semigroup m, Monoid m)
#endif