-- | Idempotent monoids. module Data.Monoid.Idempotent(Idempotent) where import Data.Monoid -- | The class of monoids that are also idempotent. -- -- Instances must satisfy the following law: -- -- * @mappend a a = a@ class (Monoid m) => Idempotent m instance Idempotent () instance Idempotent (First a) instance Idempotent (Last a) instance Idempotent Any instance Idempotent All instance Idempotent Ordering instance (Idempotent m) => Idempotent (Dual m) instance (Idempotent m) => Idempotent (r -> m) instance (Idempotent a, Idempotent b) => Idempotent (a, b) instance (Idempotent a, Idempotent b, Idempotent c) => Idempotent (a, b, c) instance (Idempotent a, Idempotent b, Idempotent c, Idempotent d) => Idempotent (a, b, c, d) instance (Idempotent a, Idempotent b, Idempotent c, Idempotent d, Idempotent e) => Idempotent (a, b, c, d, e)