{- | Copyright: (c) 2016 Stephen Diehl (c) 20016-2018 Serokell (c) 2018 Kowainik License: MIT Maintainer: Kowainik Reexports functions to work with monoids plus adds extra useful functions. -} module Relude.Monoid ( module Data.Monoid , module Data.Semigroup , maybeToMonoid ) where import Data.Monoid (All (..), Alt (..), Any (..), Dual (..), Endo (..), First (..), Last (..), Monoid (..), Product (..), Sum (..)) import Data.Semigroup (Option (..), Semigroup (sconcat, stimes, (<>)), WrappedMonoid, cycle1, mtimesDefault, stimesIdempotent, stimesIdempotentMonoid, stimesMonoid) import Relude.Monad.Reexport (Maybe, fromMaybe) -- $setup -- >>> import Relude.Base (Int) -- >>> import Relude.Monad (Maybe (..)) -- | Extracts 'Monoid' value from 'Maybe' returning 'mempty' if 'Nothing'. -- -- >>> maybeToMonoid (Just [1,2,3] :: Maybe [Int]) -- [1,2,3] -- >>> maybeToMonoid (Nothing :: Maybe [Int]) -- [] maybeToMonoid :: Monoid m => Maybe m -> m maybeToMonoid = fromMaybe mempty