monoid-statistics 0.2 → 0.3
raw patch · 3 files changed
+26/−67 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Monoid.Statistics.Numeric: class ConvertibleToDouble a
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Double
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Float
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Int
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Int16
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Int32
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Int64
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Int8
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Integer
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Word
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Word16
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Word32
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Word64
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble Word8
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble a => StatMonoid Mean a
- Data.Monoid.Statistics.Numeric: instance ConvertibleToDouble a => StatMonoid Variance a
- Data.Monoid.Statistics.Numeric: toDouble :: ConvertibleToDouble a => a -> Double
+ Data.Monoid.Statistics: instance (Eq a, Eq b) => Eq (TwoStats a b)
+ Data.Monoid.Statistics: instance (Show a, Show b) => Show (TwoStats a b)
+ Data.Monoid.Statistics: instance Typeable2 TwoStats
+ Data.Monoid.Statistics.Numeric: instance Eq Max
+ Data.Monoid.Statistics.Numeric: instance Eq Mean
+ Data.Monoid.Statistics.Numeric: instance Eq Min
+ Data.Monoid.Statistics.Numeric: instance Eq Variance
+ Data.Monoid.Statistics.Numeric: instance Eq a => Eq (Count a)
+ Data.Monoid.Statistics.Numeric: instance Ord Max
+ Data.Monoid.Statistics.Numeric: instance Ord Min
+ Data.Monoid.Statistics.Numeric: instance Ord a => Ord (Count a)
+ Data.Monoid.Statistics.Numeric: instance Real a => StatMonoid Mean a
+ Data.Monoid.Statistics.Numeric: instance Real a => StatMonoid Variance a
+ Data.Monoid.Statistics.Numeric: instance Typeable Max
+ Data.Monoid.Statistics.Numeric: instance Typeable Mean
+ Data.Monoid.Statistics.Numeric: instance Typeable Min
+ Data.Monoid.Statistics.Numeric: instance Typeable Variance
+ Data.Monoid.Statistics.Numeric: instance Typeable1 Count
Files
- Data/Monoid/Statistics.hs +3/−0
- Data/Monoid/Statistics/Numeric.hs +15/−64
- monoid-statistics.cabal +8/−3
Data/Monoid/Statistics.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE DeriveDataTypeable #-} -- | -- Module : Data.Monoid.Statistics -- Copyright : Copyright (c) 2010, Alexey Khudyakov <alexey.skladnoy@gmail.com>@@ -18,6 +19,7 @@ import Data.Monoid+import Data.Typeable (Typeable) import qualified Data.Foldable as F @@ -57,6 +59,7 @@ data TwoStats a b = TwoStats { calcStat1 :: !a , calcStat2 :: !b }+ deriving (Show,Eq,Typeable) instance (Monoid a, Monoid b) => Monoid (TwoStats a b) where mempty = TwoStats mempty mempty
Data/Monoid/Statistics/Numeric.hs view
@@ -1,7 +1,8 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE DeriveDataTypeable #-} module Data.Monoid.Statistics.Numeric ( -- * Mean and variance Count(..)@@ -19,8 +20,6 @@ -- * Maximum and minimum , Max(..) , Min(..)- -- * Conversion to Double- , ConvertibleToDouble(..) ) where import Data.Int (Int8, Int16, Int32, Int64)@@ -29,7 +28,7 @@ import Data.Monoid import Data.Monoid.Statistics-+import Data.Typeable (Typeable) ---------------------------------------------------------------- -- Statistical monoids@@ -37,7 +36,7 @@ -- | Simplest statistics. Number of elements in the sample newtype Count a = Count { calcCountI :: a }- deriving Show+ deriving (Show,Eq,Ord,Typeable) -- | Fix type of monoid asCount :: Count a -> Count a@@ -67,7 +66,7 @@ -- Numeric stability of 'mappend' is not proven. data Mean = Mean {-# UNPACK #-} !Int -- Number of entries {-# UNPACK #-} !Double -- Current mean- deriving Show+ deriving (Show,Eq,Typeable) -- | Fix type of monoid asMean :: Mean -> Mean@@ -83,8 +82,8 @@ {-# INLINE mempty #-} {-# INLINE mappend #-} -instance ConvertibleToDouble a => StatMonoid Mean a where- pappend !x !(Mean n m) = Mean n' (m + (toDouble x - m) / fromIntegral n') where n' = n+1+instance Real a => StatMonoid Mean a where+ pappend !x !(Mean n m) = Mean n' (m + (realToFrac x - m) / fromIntegral n') where n' = n+1 {-# INLINE pappend #-} instance CalcCount Mean where@@ -101,7 +100,7 @@ data Variance = Variance {-# UNPACK #-} !Int -- Number of elements in the sample {-# UNPACK #-} !Double -- Current sum of elements of sample {-# UNPACK #-} !Double -- Current sum of squares of deviations from current mean- deriving Show+ deriving (Show,Eq,Typeable) -- | Fix type of monoid asVariance :: Variance -> Variance@@ -130,9 +129,9 @@ {-# INLINE mempty #-} {-# INLINE mappend #-} -instance ConvertibleToDouble a => StatMonoid Variance a where+instance Real a => StatMonoid Variance a where -- Can be implemented directly as in Welford-Knuth algorithm.- pappend !x !s = s `mappend` (Variance 1 (toDouble x) 0)+ pappend !x !s = s `mappend` (Variance 1 (realToFrac x) 0) {-# INLINE pappend #-} instance CalcCount Variance where@@ -154,7 +153,7 @@ -- | Calculate minimum of sample. For empty sample returns NaN. Any -- NaN encountedred will be ignored. newtype Min = Min { calcMin :: Double }- deriving Show+ deriving (Show,Eq,Ord,Typeable) -- N.B. forall (x :: Double) (x <= NaN) == False instance Monoid Min where@@ -173,7 +172,7 @@ -- | Calculate maximum of sample. For empty sample returns NaN. Any -- NaN encountedred will be ignored. newtype Max = Max { calcMax :: Double }- deriving Show+ deriving (Show,Eq,Ord,Typeable) instance Monoid Max where mempty = Max (0/0)@@ -222,56 +221,8 @@ ------------------------------------------------------------------- Conversion to Double+-- Helpers -------------------------------------------------------------------- | Data type which could be convered to Double-class ConvertibleToDouble a where- toDouble :: a -> Double- --- Floating point-instance ConvertibleToDouble Double where- toDouble = id- {-# INLINE toDouble #-}-instance ConvertibleToDouble Float where- toDouble = float2Double- {-# INLINE toDouble #-}--- Basic integral types-instance ConvertibleToDouble Integer where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Int where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Word where- toDouble = fromIntegral- {-# INLINE toDouble #-}--- Integral types with fixed size-instance ConvertibleToDouble Int8 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Int16 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Int32 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Int64 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Word8 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Word16 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Word32 where- toDouble = fromIntegral- {-# INLINE toDouble #-}-instance ConvertibleToDouble Word64 where- toDouble = fromIntegral- {-# INLINE toDouble #-}- sqr :: Double -> Double sqr x = x * x
monoid-statistics.cabal view
@@ -1,5 +1,5 @@ Name: monoid-statistics-Version: 0.2+Version: 0.3 Cabal-Version: >= 1.6 License: BSD3 License-File: LICENSE@@ -11,9 +11,14 @@ Synopsis: Monoids for calculation of statistics of sample Description:- Monoids for calculation of statistics of sample+ Monoids for calculation of statistics of sample. This approach+ allows to calculate many statistics in one pass over data and+ possibility to parallelize calculations. However not all statistics + could be calculated this way. .- Currently only mean and number of elements could be calculated+ This packages is quite similar to monoids package but limited to+ calculation on statistics. In particular it makes use of+ commutatitvity of statistical monoids. source-repository head