-- | Extra functions for working with monoids.
module Data.Monoid.Extra(
    module Data.Monoid,
    -- * Extra operations
    mwhen
    ) where

import Data.Monoid

-- | Like 'Control.Monad.when', but operating on a 'Monoid'. If the first argument
--   is 'True' returns the second, otherwise returns 'mempty'.
--
-- > mwhen True  "test" == "test"
-- > mwhen False "test" == ""
mwhen :: Monoid a => Bool -> a -> a
mwhen :: forall a. Monoid a => Bool -> a -> a
mwhen Bool
b a
x = if Bool
b then a
x else forall a. Monoid a => a
mempty