diff --git a/Data/Monoid/Statistics/Class.hs b/Data/Monoid/Statistics/Class.hs
--- a/Data/Monoid/Statistics/Class.hs
+++ b/Data/Monoid/Statistics/Class.hs
@@ -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)
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,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
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:        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
