associative-0.0.1: examples/Data/Associative/Examples/PartialMonoidOpExamples.hs
{-# OPTIONS_GHC -Wall -Werror #-}
-- |
-- Example usages of "Data.Associative.PartialMonoidOp".
module Data.Associative.Examples.PartialMonoidOpExamples
( -- * Constructing partial monoid operations
addPartialMonoid,
catPartialMonoid,
-- * Identity element laws
partialMonoidIdentityLawExample,
)
where
import Data.Associative.PartialMonoidOp
( PartialMonoidOp (..),
identityPartialMonoidOp,
pmonoidList,
runPartialMonoidOp,
)
import Data.Associative.PartialSemigroupOp (total)
-- * Constructing partial monoid operations
-- | A partial monoid operation for addition with identity 0.
--
-- >>> runPartialMonoidOp addPartialMonoid 3 4
-- Just 7
-- >>> identityPartialMonoidOp addPartialMonoid
-- 0
addPartialMonoid :: PartialMonoidOp Int
addPartialMonoid = PartialMonoidOp (total (+)) 0
-- | A partial monoid operation from the 'Monoid' class.
--
-- >>> runPartialMonoidOp catPartialMonoid [1,2] [3,4 :: Int]
-- Just [1,2,3,4]
-- >>> identityPartialMonoidOp catPartialMonoid
-- []
catPartialMonoid :: PartialMonoidOp [Int]
catPartialMonoid = pmonoidList
-- * Identity element laws
-- | The identity element is neutral under the operation.
--
-- >>> let e = identityPartialMonoidOp addPartialMonoid
-- >>> runPartialMonoidOp addPartialMonoid e 42
-- Just 42
-- >>> runPartialMonoidOp addPartialMonoid 42 e
-- Just 42
partialMonoidIdentityLawExample :: ()
partialMonoidIdentityLawExample = ()
-- helpers to suppress unused-import warnings for re-exports used in doctests
_suppressRunPartialMonoidOp :: PartialMonoidOp a -> a -> a -> Maybe a
_suppressRunPartialMonoidOp = runPartialMonoidOp
_suppressIdentityPartialMonoidOp :: PartialMonoidOp a -> a
_suppressIdentityPartialMonoidOp = identityPartialMonoidOp