packages feed

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 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