id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
1952,Max and Min for Monoid,conal,,"I'd like to add two instances to {{{Data.Monoid}}}, alongside of All/Any, Sum/Product, and First/Last.

Here's a current instance (as a style example):
{{{
-- | Boolean monoid under conjunction.
newtype All = All { getAll :: Bool }
	deriving (Eq, Ord, Read, Show, Bounded)

instance Monoid All where
	mempty = All True
	All x `mappend` All y = All (x && y)
}}}

My proposed addition:
{{{
-- | Ordered monoid under 'max'.
newtype Max a = Max { getMax :: a }
	deriving (Eq, Ord, Read, Show, Bounded)

instance (Ord a, Bounded a) => Monoid (Max a) where
	mempty = Max minBound
	Max a `mappend` Max b = Max (a `max` b)

-- | Ordered monoid under 'min'.
newtype Min a = Min { getMin :: a }
	deriving (Eq, Ord, Read, Show, Bounded)

instance (Ord a, Bounded a) => Monoid (Min a) where
	mempty = Min minBound
	Min a `mappend` Min b = Min (a `min` b)
}}}

I have a niggling uncertainty about the Ord & Bounded instances for {{{Min a}}}?  Is there a reason flip the {{{a}}} ordering instead of preserving it?
",proposal,closed,normal,Not GHC,libraries/base,6.8.1,wontfix,,conal@…,Unknown/Multiple,Unknown/Multiple,None/Unknown,Easy (less than 1 hour),,,,
