Similarly, I&#39;m using the following to get around type parameters that don&#39;t provide Bounded:<br><br>data AddBounds a = MinBound | NoBound a | MaxBound<br>&nbsp; deriving (Eq, Ord, Read, Show)<br><br>instance Bounded (AddBounds a) where
<br>&nbsp; minBound = MinBound<br>&nbsp; maxBound = MaxBound<br><br><br><div class="gmail_quote">On Dec 2, 2007 3:25 PM, Ross Paterson &lt;<a href="mailto:ross@soi.city.ac.uk">ross@soi.city.ac.uk</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Sun, Dec 02, 2007 at 09:57:50AM -0800, Conal Elliott wrote:<br></div><div class="Ih2E3d">&gt; My proposed addition:<br>&gt;<br>&gt; -- | Ordered monoid under &#39;max&#39;.<br>&gt; newtype Max a = Max { getMax :: a }
<br>&gt; &nbsp; &nbsp; &nbsp; deriving (Eq, Ord, Read, Show, Bounded)<br>&gt;<br>&gt; instance (Ord a, Bounded a) =&gt; Monoid (Max a) where<br>&gt; &nbsp; &nbsp; &nbsp; mempty = Max minBound<br>&gt; &nbsp; &nbsp; &nbsp; Max a `mappend` Max b = Max (a `max` b)<br><br>
</div>Funny, I was thinking of proposing a Max type that adjoined a synthetic<br>identity, as we did in the finger tree paper:<br><br>data Max a = NoMax | Max a<br> &nbsp; &nbsp; &nbsp; &nbsp;deriving (Eq, Ord, Read, Show)<br><br>instance Ord a =&gt; Monoid (Max a) where
<br> &nbsp; &nbsp; &nbsp; &nbsp;mempty = NoMax<br> &nbsp; &nbsp; &nbsp; &nbsp;NoMax `mappend` b = b<br> &nbsp; &nbsp; &nbsp; &nbsp;a `mappend` NoMax = a<br> &nbsp; &nbsp; &nbsp; &nbsp;Max x `mappend` Max y = Max (x `max` y)<br><br>and similarly for Min. &nbsp;One could even define<br><br> &nbsp; &nbsp; &nbsp; &nbsp;getMax :: Bounded a =&gt; Max a -&gt; a
<br> &nbsp; &nbsp; &nbsp; &nbsp;getMax NoMax = minBound<br> &nbsp; &nbsp; &nbsp; &nbsp;getMax (Max x) = x<br><div><div></div><div class="Wj3C7c">_______________________________________________<br>Libraries mailing list<br><a href="mailto:Libraries@haskell.org">
Libraries@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/libraries" target="_blank">http://www.haskell.org/mailman/listinfo/libraries</a><br></div></div></blockquote></div><br>