При просмотре 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
, чем приведенное выше?