module Extension.Data.Monoid (
(<>)
, module Data.Monoid
, MinMax(..)
, minMaxSingleton
) where
import Data.Monoid
#if __GLASGOW_HASKELL__ < 704
infixr 6 <>
(<>) :: Monoid m => m -> m -> m
(<>) = mappend
#endif
newtype MinMax a = MinMax { getMinMax :: Maybe (a, a) }
minMaxSingleton :: a -> MinMax a
minMaxSingleton x = MinMax (Just (x, x))
instance Ord a => Monoid (MinMax a) where
mempty = MinMax Nothing
MinMax Nothing `mappend` y = y
x `mappend` MinMax Nothing = x
MinMax (Just (xMin, xMax)) `mappend` MinMax (Just (yMin, yMax)) =
MinMax (Just (min xMin yMin, max xMax yMax))