<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">The Monoid instances for Sum and Product do not respect the Monoid laws.</span><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">The instances are:</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Num a => instance Monoid (Sum a)</div><div style="font-family:arial,sans-serif;font-size:13px">Num a => instance Monoid (Product a)</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Float and Double are instances of the Num typeclass, however, floating point addition and multiplication are not associative. Here's an example:</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">> (Sum 1234.567 `mappend` Sum 45.67834) `mappend` Sum 0.0004</div><div style="font-family:arial,sans-serif;font-size:13px">Sum {getSum = 1280.2457399999998}</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px"><div>> Sum 1234.567 `mappend` (Sum 45.67834 `mappend` Sum 0.0004)</div><div>Sum {getSum = 1280.24574}</div></div><div style="font-family:arial,sans-serif;font-size:13px"><p>Shouldn't these instances be constrained to Integral types?</p><p>Jason</p></div></div>