次のように定義されたモノイドがあるとしましょう。
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
}