module Data.Monoid.Idempotent(Idempotent) where
import Data.Monoid
import qualified Data.Set as Set
import qualified Data.IntSet as IntSet
import qualified Data.Map.Lazy as ML
import qualified Data.IntMap.Lazy as IML
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)
instance Ord a => Idempotent (Set.Set a)
instance Idempotent IntSet.IntSet
instance Ord a => Idempotent (ML.Map a b)
instance Idempotent (IML.IntMap a)