Обобщение от всего, над чем есть ноль и бинарная операция (ассоциативная). Строки, списки, мапы, функции (возвращающие моноид), Sum, Product, All, Any...
Может кто-нибудь подскажет зачем нужен такой тип данных как моноид. Что это такое я знаю, а в чем его прикладная значимость?
если у вас есть x, y :: Map k (Set (String, Set v)), то для него “x <> y” будет иметь достаточно практический смысл и даже возможно такой, какой вам нужно. Достаточно определить instance Monoid v и иметь всю моноидную функциональность (Semigroup скорее даже) забесплатно