associative-0.0.1: examples/Data/Associative/Examples/MonoidOpExamples.hs
{-# OPTIONS_GHC -Wall -Werror #-}
-- |
-- Example usages of "Data.Associative.MonoidOp".
module Data.Associative.Examples.MonoidOpExamples
( -- * Constructing monoid operations
addMonoid,
catMonoid,
-- * Identity element laws
monoidIdentityLawExample,
)
where
import Data.Associative.MonoidOp
( MonoidOp (..),
identityMonoidOp,
monoidList,
runMonoidOp,
)
import Data.Associative.SemigroupOp (op)
-- * Constructing monoid operations
-- | A monoid operation for addition with identity 0.
--
-- >>> runMonoidOp addMonoid 3 4
-- 7
-- >>> identityMonoidOp addMonoid
-- 0
addMonoid :: MonoidOp Int
addMonoid = MonoidOp (op (+)) 0
-- | A monoid operation from the 'Monoid' class.
--
-- >>> runMonoidOp catMonoid [1,2] [3,4 :: Int]
-- [1,2,3,4]
-- >>> identityMonoidOp catMonoid
-- []
catMonoid :: MonoidOp [Int]
catMonoid = monoidList
-- * Identity element laws
-- | The identity element is neutral under the operation.
--
-- >>> let e = identityMonoidOp addMonoid
-- >>> runMonoidOp addMonoid e 42
-- 42
-- >>> runMonoidOp addMonoid 42 e
-- 42
monoidIdentityLawExample :: ()
monoidIdentityLawExample = ()
-- helpers to suppress unused-import warnings for re-exports used in doctests
_suppressRunMonoidOp :: MonoidOp a -> a -> a -> a
_suppressRunMonoidOp = runMonoidOp
_suppressIdentityMonoidOp :: MonoidOp a -> a
_suppressIdentityMonoidOp = identityMonoidOp