diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,7 @@
+## Changes in 0.9.1
+ - Use the more efficient version of `replicateM` and `replicateM_` introduced
+   in `base-4.9`
+
 ## Changes in 0.9.0
  - Sync with `base-4.9`/GHC 8.0
  - Weakened `RealFloat` constraints on `realPart`, `imagPart`, `conjugate`,
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012-2015 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>
+Copyright (c) 2012-2016 Simon Hengel <sol@typeful.net> and Ryan Scott <ryan.gl.scott@gmail.com>
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -194,6 +194,9 @@
 * [`bifunctors`](http://hackage.haskell.org/package/bifunctors)
   for the [`Bifunctor`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Bifunctor.html#t:Bifunctor)
   type class, introduced in `base-4.8.0.0`
+* [`fail`](http://hackage.haskell.org/package/fail)
+  for the [`MonadFail`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Monad-Fail.html#t:MonadFail)
+  type class, introduced in `base-4.9.0.0`
 * [`generic-deriving`](http://hackage.haskell.org/package/generic-deriving)
   for everything in the [`GHC.Generics`](http://hackage.haskell.org/package/base-4.8.0.0/docs/GHC-Generics.html)
   module, introduced to `ghc-prim` in GHC 7.2 (and later moved to `base-4.6.0.0`)
diff --git a/base-compat.cabal b/base-compat.cabal
--- a/base-compat.cabal
+++ b/base-compat.cabal
@@ -1,10 +1,10 @@
 name:             base-compat
-version:          0.9.0
+version:          0.9.1
 license:          MIT
 license-file:     LICENSE
-copyright:        (c) 2012-2015 Simon Hengel,
-                  (c) 2014 João Cristóvão,
-                  (c) 2015 Ryan Scott
+copyright:        (c) 2012-2016 Simon Hengel,
+                  (c) 2014-2016 João Cristóvão,
+                  (c) 2015-2016 Ryan Scott
 author:           Simon Hengel <sol@typeful.net>,
                   João Cristóvão <jmacristovao@gmail.com>,
                   Ryan Scott <ryan.gl.scott@gmail.com>
@@ -38,6 +38,7 @@
                   , GHC == 7.6.1,  GHC == 7.6.2,  GHC == 7.6.3
                   , GHC == 7.8.1,  GHC == 7.8.2,  GHC == 7.8.3,  GHC == 7.8.4
                   , GHC == 7.10.1, GHC == 7.10.2, GHC == 7.10.3
+                  , GHC == 8.0.1
 extra-source-files: CHANGES.markdown, README.markdown
 
 source-repository head
diff --git a/src/Control/Monad/Compat.hs b/src/Control/Monad/Compat.hs
--- a/src/Control/Monad/Compat.hs
+++ b/src/Control/Monad/Compat.hs
@@ -171,14 +171,22 @@
 {-# INLINEABLE replicateM #-}
 {-# SPECIALISE replicateM :: Int -> IO a -> IO [a] #-}
 {-# SPECIALISE replicateM :: Int -> Maybe a -> Maybe [a] #-}
-replicateM 0 _    = pure []
-replicateM n x    = liftA2 (:) x (replicateM (pred n) x)
+replicateM cnt0 f =
+    loop cnt0
+  where
+    loop cnt
+        | cnt <= 0  = pure []
+        | otherwise = liftA2 (:) f (loop (cnt - 1))
 
 -- | Like 'replicateM', but discards the result.
 replicateM_       :: (Applicative m) => Int -> m a -> m ()
 {-# INLINEABLE replicateM_ #-}
 {-# SPECIALISE replicateM_ :: Int -> IO a -> IO () #-}
 {-# SPECIALISE replicateM_ :: Int -> Maybe a -> Maybe () #-}
-replicateM_ 0 _   = pure ()
-replicateM_ n x   = x *> replicateM_ (pred n) x
+replicateM_ cnt0 f =
+    loop cnt0
+  where
+    loop cnt
+        | cnt <= 0  = pure ()
+        | otherwise = f *> loop (cnt - 1)
 #endif
