При просмотре Data.Monoid я вижу, что существуют различные обертки newtype, такие как All, Sum или Product, которые кодируют различные типы моноидов. Однако, пытаясь использовать эти обертки, я не могу не задаться вопросом, что польза от использования их не Data.Monoid. Например, сравните довольно громоздкое суммирование
print $ getSum $ mconcat [ Sum 33, Sum 2, Sum 55 ]
против. более сжатый идиоматический вариант
print $ sum [ 33, 2, 55 ]
Но какой смысл? Есть ли практическое значение, имеющее все эти обертки newtype? Есть ли более убедительные примеры использования оболочки Monoid newtype, чем приведенное выше?