Monoid

A Monoid in Haskell is a data type with a lawful Monoid instance, that is:

class Semigroup a => Monoid a where
    mempty :: a
    mappend :: a -> a -> a
    mappend = (<>)

Monoids are data types that can be instantiated empty and be smashed together without losing any information. A common example is and [a] (for any a), where mempty=[] and mappend=(++). Monoids are always Semigroups as well.