monoid-statistics 1.0.0 → 1.0.1.0
raw patch · 3 files changed
+75/−12 lines, 3 filesdep ~math-functionsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: math-functions
API changes (from Hackage documentation)
- Data.Monoid.Statistics.Class: instance (Data.Data.Data b, Data.Data.Data a) => Data.Data.Data (Data.Monoid.Statistics.Class.Pair a b)
- Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a0, Data.Vector.Unboxed.Base.Unbox b0) => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Monoid.Statistics.Class.Pair a0 b0)
- Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a0, Data.Vector.Unboxed.Base.Unbox b0) => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Monoid.Statistics.Class.Pair a0 b0)
- Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a0, Data.Vector.Unboxed.Base.Unbox b0) => Data.Vector.Unboxed.Base.Unbox (Data.Monoid.Statistics.Class.Pair a0 b0)
- Data.Monoid.Statistics.Class: instance (GHC.Classes.Eq b, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.Monoid.Statistics.Class.Pair a b)
- Data.Monoid.Statistics.Class: instance (GHC.Classes.Ord b, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.Monoid.Statistics.Class.Pair a b)
- Data.Monoid.Statistics.Class: instance (GHC.Num.Num a, a ~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Product a) a'
- Data.Monoid.Statistics.Class: instance (GHC.Num.Num a, a ~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Sum a) a'
- Data.Monoid.Statistics.Class: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Data.Monoid.Statistics.Class.Pair a b)
- Data.Monoid.Statistics.Class: instance GHC.Base.Monoid Numeric.Sum.KBNSum
- Data.Monoid.Statistics.Class: instance GHC.Base.Monoid Numeric.Sum.KahanSum
- Data.Monoid.Statistics.Numeric: instance (GHC.Classes.Ord a, a ~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Statistics.Numeric.Max a) a'
- Data.Monoid.Statistics.Numeric: instance (GHC.Classes.Ord a, a ~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Statistics.Numeric.Min a) a'
- Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a0 => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Monoid.Statistics.Numeric.CountG a0)
- Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a0 => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Monoid.Statistics.Numeric.CountG a0)
- Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a0 => Data.Vector.Unboxed.Base.Unbox (Data.Monoid.Statistics.Numeric.CountG a0)
- Data.Monoid.Statistics.Numeric: instance a ~ GHC.Types.Double => Data.Monoid.Statistics.Class.StatMonoid Data.Monoid.Statistics.Numeric.MaxD a
- Data.Monoid.Statistics.Numeric: instance a ~ GHC.Types.Double => Data.Monoid.Statistics.Class.StatMonoid Data.Monoid.Statistics.Numeric.MinD a
+ Data.Monoid.Statistics.Class: instance (Data.Data.Data a, Data.Data.Data b) => Data.Data.Data (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a, Data.Vector.Unboxed.Base.Unbox b) => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a, Data.Vector.Unboxed.Base.Unbox b) => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (Data.Vector.Unboxed.Base.Unbox a, Data.Vector.Unboxed.Base.Unbox b) => Data.Vector.Unboxed.Base.Unbox (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (GHC.Base.Semigroup a, GHC.Base.Semigroup b) => GHC.Base.Semigroup (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Class: instance (GHC.Num.Num a, a Data.Type.Equality.~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Semigroup.Internal.Product a) a'
+ Data.Monoid.Statistics.Class: instance (GHC.Num.Num a, a Data.Type.Equality.~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Semigroup.Internal.Sum a) a'
+ Data.Monoid.Statistics.Class: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Data.Monoid.Statistics.Class.Pair a b)
+ Data.Monoid.Statistics.Numeric: instance (GHC.Classes.Ord a, a Data.Type.Equality.~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Statistics.Numeric.Max a) a'
+ Data.Monoid.Statistics.Numeric: instance (GHC.Classes.Ord a, a Data.Type.Equality.~ a') => Data.Monoid.Statistics.Class.StatMonoid (Data.Monoid.Statistics.Numeric.Min a) a'
+ Data.Monoid.Statistics.Numeric: instance (a Data.Type.Equality.~ GHC.Types.Double) => Data.Monoid.Statistics.Class.StatMonoid Data.Monoid.Statistics.Numeric.MaxD a
+ Data.Monoid.Statistics.Numeric: instance (a Data.Type.Equality.~ GHC.Types.Double) => Data.Monoid.Statistics.Class.StatMonoid Data.Monoid.Statistics.Numeric.MinD a
+ Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Monoid.Statistics.Numeric.CountG a)
+ Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Monoid.Statistics.Numeric.CountG a)
+ Data.Monoid.Statistics.Numeric: instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Unboxed.Base.Unbox (Data.Monoid.Statistics.Numeric.CountG a)
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.BinomAcc
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.MaxD
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.MeanKBN
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.MeanKahan
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.MinD
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.Variance
+ Data.Monoid.Statistics.Numeric: instance GHC.Base.Semigroup Data.Monoid.Statistics.Numeric.WelfordMean
+ Data.Monoid.Statistics.Numeric: instance GHC.Classes.Ord a => GHC.Base.Semigroup (Data.Monoid.Statistics.Numeric.Max a)
+ Data.Monoid.Statistics.Numeric: instance GHC.Classes.Ord a => GHC.Base.Semigroup (Data.Monoid.Statistics.Numeric.Min a)
+ Data.Monoid.Statistics.Numeric: instance GHC.Real.Integral a => GHC.Base.Semigroup (Data.Monoid.Statistics.Numeric.CountG a)
- Data.Monoid.Statistics.Class: class Monoid m => StatMonoid m a where addValue m a = m <> singletonMonoid a singletonMonoid = addValue mempty
+ Data.Monoid.Statistics.Class: class Monoid m => StatMonoid m a
Files
- Data/Monoid/Statistics/Class.hs +13/−11
- Data/Monoid/Statistics/Numeric.hs +54/−0
- monoid-statistics.cabal +8/−1
Data/Monoid/Statistics/Class.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-}@@ -25,7 +26,10 @@ ) where import Data.Data (Typeable,Data)-import Data.Monoid+#if MIN_VERSION_base(4,9,0)+import qualified Data.Semigroup as SG (Semigroup(..))+#endif+import Data.Monoid (Monoid(..),(<>),Sum(..),Product(..)) import Data.Vector.Unboxed (Unbox) import Data.Vector.Unboxed.Deriving (derivingUnbox) import qualified Data.Foldable as F@@ -86,16 +90,10 @@ instance (Num a, a ~ a') => StatMonoid (Product a) a' where singletonMonoid = Product -instance Monoid KahanSum where- mempty = zero- mappend s1 s2 = add s1 (kahan s2) instance Real a => StatMonoid KahanSum a where addValue m x = add m (realToFrac x) {-# INLINE addValue #-} -instance Monoid KBNSum where- mempty = zero- mappend s1 s2 = add s1 (kbn s2) instance Real a => StatMonoid KBNSum a where addValue m x = add m (realToFrac x) {-# INLINE addValue #-}@@ -109,12 +107,16 @@ data Pair a b = Pair !a !b deriving (Show,Eq,Ord,Typeable,Data,Generic) +#if MIN_VERSION_base(4,9,0)+instance (SG.Semigroup a, SG.Semigroup b) => SG.Semigroup (Pair a b) where+ Pair x y <> Pair x' y' = Pair (x SG.<> x') (y SG.<> y')+#endif+ instance (Monoid a, Monoid b) => Monoid (Pair a b) where- mempty = Pair mempty mempty- mappend (Pair x y) (Pair x' y') =- Pair (x <> x') (y <> y')+ mempty = Pair mempty mempty+ mappend (Pair x y) (Pair x' y') = Pair (x <> x') (y <> y') {-# INLINABLE mempty #-}- {-# INLINABLE mappend #-}+ {-# INLINE mappend #-} instance (StatMonoid a x, StatMonoid b x) => StatMonoid (Pair a b) x where addValue (Pair a b) !x = Pair (addValue a x) (addValue b x)
Data/Monoid/Statistics/Numeric.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-}@@ -43,6 +44,9 @@ import Data.Monoid ((<>)) import Data.Monoid.Statistics.Class+#if MIN_VERSION_base(4,9,0)+import qualified Data.Semigroup as SG (Semigroup(..))+#endif import Data.Data (Typeable,Data) import Data.Vector.Unboxed (Unbox) import Data.Vector.Unboxed.Deriving (derivingUnbox)@@ -63,6 +67,11 @@ asCount :: CountG a -> CountG a asCount = id +#if MIN_VERSION_base(4,9,0)+instance Integral a => SG.Semigroup (CountG a) where+ (<>) = mappend+#endif+ instance Integral a => Monoid (CountG a) where mempty = CountG 0 CountG i `mappend` CountG j = CountG (i + j)@@ -91,6 +100,11 @@ asMeanKahan :: MeanKahan -> MeanKahan asMeanKahan = id +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup MeanKahan where+ (<>) = mappend+#endif+ instance Monoid MeanKahan where mempty = MeanKahan 0 mempty MeanKahan 0 _ `mappend` m = m@@ -116,6 +130,11 @@ asMeanKBN :: MeanKBN -> MeanKBN asMeanKBN = id +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup MeanKBN where+ (<>) = mappend+#endif+ instance Monoid MeanKBN where mempty = MeanKBN 0 mempty MeanKBN 0 _ `mappend` m = m@@ -150,6 +169,11 @@ asWelfordMean :: WelfordMean -> WelfordMean asWelfordMean = id +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup WelfordMean where+ (<>) = mappend+#endif+ instance Monoid WelfordMean where mempty = WelfordMean 0 0 mappend (WelfordMean 0 _) m = m@@ -191,6 +215,11 @@ asVariance = id {-# INLINE asVariance #-} +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup Variance where+ (<>) = mappend+#endif+ -- | Iterative algorithm for calculation of variance [Chan1979] instance Monoid Variance where mempty = Variance 0 0 0@@ -234,6 +263,11 @@ newtype Min a = Min { calcMin :: Maybe a } deriving (Show,Eq,Ord,Typeable,Data,Generic) +#if MIN_VERSION_base(4,9,0)+instance Ord a => SG.Semigroup (Min a) where+ (<>) = mappend+#endif+ instance Ord a => Monoid (Min a) where mempty = Min Nothing Min (Just a) `mappend` Min (Just b) = Min (Just $! min a b)@@ -249,6 +283,11 @@ newtype Max a = Max { calcMax :: Maybe a } deriving (Show,Eq,Ord,Typeable,Data,Generic) +#if MIN_VERSION_base(4,9,0)+instance Ord a => SG.Semigroup (Max a) where+ (<>) = mappend+#endif+ instance Ord a => Monoid (Max a) where mempty = Max Nothing Max (Just a) `mappend` Max (Just b) = Max (Just $! min a b)@@ -271,6 +310,11 @@ | isNaN a && isNaN b = True | otherwise = a == b +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup MinD where+ (<>) = mappend+#endif+ -- N.B. forall (x :: Double) (x <= NaN) == False instance Monoid MinD where mempty = MinD (0/0)@@ -296,6 +340,11 @@ | isNaN a && isNaN b = True | otherwise = a == b +#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup MaxD where+ (<>) = mappend+#endif+ instance Monoid MaxD where mempty = MaxD (0/0) mappend (MaxD x) (MaxD y)@@ -320,6 +369,11 @@ -- | Type restricted 'id' asBinomAcc :: BinomAcc -> BinomAcc asBinomAcc = id++#if MIN_VERSION_base(4,9,0)+instance SG.Semigroup BinomAcc where+ (<>) = mappend+#endif instance Monoid BinomAcc where mempty = BinomAcc 0 0
monoid-statistics.cabal view
@@ -1,5 +1,5 @@ Name: monoid-statistics-Version: 1.0.0+Version: 1.0.1.0 Cabal-Version: >= 1.10 License: BSD3 License-File: LICENSE@@ -16,6 +16,13 @@ allows to calculate many statistics in one pass over data and possibility to parallelize calculations. However not all statistics could be calculated this way.++tested-with:+ GHC ==7.10.3+ || ==8.0.2+ || ==8.2.2+ || ==8.4.4+ || ==8.6.5 extra-source-files: README.md