#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

Reply via email to