diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## Parser combinators 1.0.3
+
+* Dropped support for GHC 7.10.
+
+* Added a test suite as a separate package called
+  `parser-combinators-tests`.
+
 ## Parser combinators 1.0.2
 
 * Defined `liftA2` for `Permutation` manually. The new definition should be
diff --git a/Control/Applicative/Combinators.hs b/Control/Applicative/Combinators.hs
--- a/Control/Applicative/Combinators.hs
+++ b/Control/Applicative/Combinators.hs
@@ -43,7 +43,6 @@
 -- composite parsers in @try@ to achieve correct behavior.
 
 {-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE CPP          #-}
 
 module Control.Applicative.Combinators
   ( -- * Re-exports from "Control.Applicative"
@@ -81,11 +80,8 @@
 where
 
 import Control.Applicative
-import Data.Foldable
-
-#if MIN_VERSION_base(4,9,0)
 import Control.Monad (replicateM, replicateM_)
-#endif
+import Data.Foldable
 
 ----------------------------------------------------------------------------
 -- Re-exports from "Control.Applicative"
@@ -156,11 +152,7 @@
 -- See also: 'skipCount', 'count''.
 
 count :: Applicative m => Int -> m a -> m [a]
-#if MIN_VERSION_base(4,9,0)
 count = replicateM
-#else
-count n p = sequenceA (replicate n p)
-#endif
 {-# INLINE count #-}
 
 -- | @'count'' m n p@ parses from @m@ to @n@ occurrences of @p@. If @n@ is
@@ -298,11 +290,7 @@
 -- @since 0.3.0
 
 skipCount :: Applicative m => Int -> m a -> m ()
-#if MIN_VERSION_base(4,9,0)
 skipCount = replicateM_
-#else
-skipCount n p = sequenceA_ (replicate n p)
-#endif
 {-# INLINE skipCount #-}
 
 -- | @'skipManyTill' p end@ applies the parser @p@ /zero/ or more times
diff --git a/LICENSE.md b/LICENSE.md
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,4 +1,4 @@
-Copyright © 2017–2018 Mark Karpov
+Copyright © 2017–2019 Mark Karpov
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,8 +9,7 @@
 The package provides common parser combinators defined in terms of
 `Applicative` and `Alternative` without any dependencies but `base`. There
 are also more efficient versions of the combinators defined in terms of
-`Monad` and `MonadPlus`. Test suite and benchmarks can be found in the
-[Megaparsec repo](https://github.com/mrkkrp/megaparsec).
+`Monad` and `MonadPlus`.
 
 ## Contribution
 
diff --git a/parser-combinators.cabal b/parser-combinators.cabal
--- a/parser-combinators.cabal
+++ b/parser-combinators.cabal
@@ -1,7 +1,7 @@
 name:                 parser-combinators
-version:              1.0.2
+version:              1.0.3
 cabal-version:        1.18
-tested-with:          GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.4, GHC==8.6.4
+tested-with:          GHC==8.0.2, GHC==8.2.2, GHC==8.4.4, GHC==8.6.5
 license:              BSD3
 license-file:         LICENSE.md
 author:               Mark Karpov <markkarpov92@gmail.com>
@@ -26,11 +26,7 @@
   default:            False
 
 library
-  build-depends:      base             >= 4.8 && < 5.0
-
-  if !impl(ghc >= 8.0)
-    build-depends:    semigroups == 0.18.*
-
+  build-depends:      base             >= 4.9 && < 5.0
   exposed-modules:    Control.Applicative.Combinators
                     , Control.Applicative.Combinators.NonEmpty
                     , Control.Applicative.Permutations
@@ -41,7 +37,7 @@
     ghc-options:      -Wall -Werror
   else
     ghc-options:      -O2 -Wall
-  if flag(dev) && impl(ghc >= 8.0)
+  if flag(dev)
     ghc-options:      -Wcompat
                       -Wincomplete-record-updates
                       -Wincomplete-uni-patterns
