monoid-extras 0.2.2.3 → 0.3.0.0
raw patch · 4 files changed
+86/−35 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Monoid.PosInf: Finite :: a -> PosInf a
- Data.Monoid.PosInf: PosInfty :: PosInf a
- Data.Monoid.PosInf: data PosInf a
- Data.Monoid.PosInf: instance Eq a => Eq (PosInf a)
- Data.Monoid.PosInf: instance Ord a => Monoid (PosInf a)
- Data.Monoid.PosInf: instance Ord a => Ord (PosInf a)
- Data.Monoid.PosInf: instance Ord a => Semigroup (PosInf a)
- Data.Monoid.PosInf: instance Show a => Show (PosInf a)
- Data.Monoid.PosInf: minimum :: Ord a => [a] -> PosInf a
+ Data.Monoid.Inf: Finite :: a -> Inf p a
+ Data.Monoid.Inf: Infinity :: Inf p a
+ Data.Monoid.Inf: data Inf p a
+ Data.Monoid.Inf: instance Eq a => Eq (Inf p a)
+ Data.Monoid.Inf: instance Ord a => Monoid (Inf Neg a)
+ Data.Monoid.Inf: instance Ord a => Monoid (Inf Pos a)
+ Data.Monoid.Inf: instance Ord a => Ord (Inf Neg a)
+ Data.Monoid.Inf: instance Ord a => Ord (Inf Pos a)
+ Data.Monoid.Inf: instance Ord a => Semigroup (Inf Neg a)
+ Data.Monoid.Inf: instance Ord a => Semigroup (Inf Pos a)
+ Data.Monoid.Inf: instance Read a => Read (Inf p a)
+ Data.Monoid.Inf: instance Show a => Show (Inf p a)
+ Data.Monoid.Inf: maximum :: Ord a => [a] -> NegInf a
+ Data.Monoid.Inf: minimum :: Ord a => [a] -> PosInf a
+ Data.Monoid.Inf: negFinite :: a -> NegInf a
+ Data.Monoid.Inf: negInfty :: NegInf a
+ Data.Monoid.Inf: posFinite :: a -> PosInf a
+ Data.Monoid.Inf: posInfty :: PosInf a
+ Data.Monoid.Inf: type NegInf a = Inf Neg a
+ Data.Monoid.Inf: type PosInf a = Inf Pos a
Files
- CHANGES +5/−0
- monoid-extras.cabal +2/−2
- src/Data/Monoid/Inf.hs +79/−0
- src/Data/Monoid/PosInf.hs +0/−33
CHANGES view
@@ -1,3 +1,8 @@+* 0.3: 2 May 2013++ - generalize PosInf to Inf, which supports making monoids out of+ semigroups under both min and max+ * 0.2.2.3: 28 March 2013 - bump upper bound to allow base-4.7
monoid-extras.cabal view
@@ -1,5 +1,5 @@ name: monoid-extras-version: 0.2.2.3+version: 0.3.0.0 synopsis: Various extra monoid-related definitions and utilities description: Various extra monoid-related definitions and utilities, such as monoid actions, monoid coproducts, \"deletable\"@@ -24,8 +24,8 @@ Data.Monoid.Coproduct, Data.Monoid.Cut, Data.Monoid.Deletable,+ Data.Monoid.Inf, Data.Monoid.MList,- Data.Monoid.PosInf, Data.Monoid.Recommend, Data.Monoid.Split, Data.Monoid.WithSemigroup
+ src/Data/Monoid/Inf.hs view
@@ -0,0 +1,79 @@+{-# LANGUAGE FlexibleInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Data.Monoid.Inf+-- Copyright : (c) 2012 diagrams-core team (see LICENSE)+-- License : BSD-style (see LICENSE)+-- Maintainer : diagrams-discuss@googlegroups.com+--+-- Make semigroup under 'min' or 'max' into monoids by adjoining an+-- element corresponding to infinity (positive or negative,+-- respectively). These types are similar to @Option (Min a)@ and+-- @Option (Max a)@ respectively, except that the 'Ord' instance+-- matches the 'Monoid' instance.+--+-----------------------------------------------------------------------------++module Data.Monoid.Inf+ ( Inf(..)+ , PosInf, NegInf+ , minimum, maximum+ -- * Type-restricted constructors+ , posInfty, negInfty+ , posFinite, negFinite+ ) where++import Data.Semigroup+import qualified Prelude as P+import Prelude hiding (minimum, maximum)++data Pos+data Neg++data Inf p a = Infinity | Finite a+ deriving (Eq, Show, Read)++type PosInf a = Inf Pos a+type NegInf a = Inf Neg a++instance Ord a => Ord (Inf Pos a) where+ compare Infinity Infinity = EQ+ compare Infinity Finite{} = GT+ compare Finite{} Infinity = LT+ compare (Finite a) (Finite b) = compare a b++instance Ord a => Ord (Inf Neg a) where+ compare Infinity Infinity = EQ+ compare Infinity Finite{} = LT+ compare Finite{} Infinity = GT+ compare (Finite a) (Finite b) = compare a b++instance Ord a => Semigroup (Inf Pos a) where+ (<>) = min++instance Ord a => Semigroup (Inf Neg a) where+ (<>) = max++instance Ord a => Monoid (Inf Pos a) where+ mempty = Infinity+ mappend = (<>)++instance Ord a => Monoid (Inf Neg a) where+ mempty = Infinity+ mappend = (<>)++minimum :: Ord a => [a] -> PosInf a+minimum xs = P.minimum (Infinity : map Finite xs)++maximum :: Ord a => [a] -> NegInf a+maximum xs = P.maximum (Infinity : map Finite xs)++posInfty :: PosInf a+negInfty :: NegInf a+posFinite :: a -> PosInf a+negFinite :: a -> NegInf a++posInfty = Infinity+negInfty = Infinity+posFinite = Finite+negFinite = Finite
− src/Data/Monoid/PosInf.hs
@@ -1,33 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Data.Monoid.PosInf--- Copyright : (c) 2012 diagrams-core team (see LICENSE)--- License : BSD-style (see LICENSE)--- Maintainer : diagrams-discuss@googlegroups.com------ Make a semigroup under 'min' into a monoid by adjoining an element--- corresponding to positive infinity.-----------------------------------------------------------------------------------module Data.Monoid.PosInf- ( PosInf(..)- , minimum- ) where--import Data.Semigroup-import qualified Prelude as P-import Prelude hiding (minimum)--data PosInf a = Finite a | PosInfty- deriving (Eq, Ord, Show)--instance Ord a => Semigroup (PosInf a) where- (<>) = min--instance Ord a => Monoid (PosInf a) where- mempty = PosInfty- mappend = (<>)--minimum :: Ord a => [a] -> PosInf a-minimum xs = P.minimum (PosInfty : map Finite xs)