diff --git a/Data/Monoid/Statistics.hs b/Data/Monoid/Statistics.hs
--- a/Data/Monoid/Statistics.hs
+++ b/Data/Monoid/Statistics.hs
@@ -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
diff --git a/Data/Monoid/Statistics/Numeric.hs b/Data/Monoid/Statistics/Numeric.hs
--- a/Data/Monoid/Statistics/Numeric.hs
+++ b/Data/Monoid/Statistics/Numeric.hs
@@ -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
diff --git a/monoid-statistics.cabal b/monoid-statistics.cabal
--- a/monoid-statistics.cabal
+++ b/monoid-statistics.cabal
@@ -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
