#1952: Max and Min for Monoid
-------------------------------+--------------------------------------------
Reporter: conal | Owner:
Type: proposal | Status: new
Priority: normal | Milestone:
Component: libraries/base | Version: 6.8.1
Severity: normal | Keywords:
Difficulty: Easy (1 hr) | Testcase:
Architecture: Unknown | Os: Unknown
-------------------------------+--------------------------------------------
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?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1952>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs