Скажем, у меня есть моноид, определенный следующим образом:
data TotalLine = TotalLine { totalQuantity :: Int, orderTotal :: Float }
instance Monoid TotalLine where
mempty = zero
mappend = add
Поскольку totalQuantity и orderTotal являются числами, они также образуют моноид под (+). Есть ли способ определить
add :: TotalLine -> TotalLine -> TotalLine
Итак, могу ли я просто распространить вызов mappend для каждого поля вместо того, чтобы вручную определять что-то вроде
add line1 line2 =
TotalLine {
totalQuantity = totalQuantity line1 + totalQuantity line2,
orderTotal = orderTotal line1 + orderTotal line2
}