diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.4.3
+
+* Increase upper bound on `doctest`
+
 1.4.2
 
 * Add `sed{Prefix,Suffix,Entire}` and `inplace{Prefix,Suffix,Entire}`
diff --git a/src/Turtle/Shell.hs b/src/Turtle/Shell.hs
--- a/src/Turtle/Shell.hs
+++ b/src/Turtle/Shell.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE RankNTypes, CPP #-}
 {-# OPTIONS_GHC -fno-warn-missing-methods #-}
 
 {-| You can think of `Shell` as @[]@ + `IO` + `Managed`.  In fact, you can embed
@@ -74,6 +74,9 @@
 import Control.Monad (MonadPlus(..), ap)
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Managed (MonadManaged(..), with)
+#if MIN_VERSION_base(4,9,0)
+import qualified Control.Monad.Fail as Fail
+#endif
 import Control.Foldl (Fold(..), FoldM(..))
 import qualified Control.Foldl as Foldl
 import Data.Foldable (Foldable)
@@ -150,6 +153,11 @@
         x  <- begin
         x' <- with resource (step x)
         done x' )
+
+#if MIN_VERSION_base(4,9,0)
+instance Fail.MonadFail Shell where
+    fail = Prelude.fail
+#endif
 
 instance Monoid a => Monoid (Shell a) where
     mempty  = pure mempty
diff --git a/turtle.cabal b/turtle.cabal
--- a/turtle.cabal
+++ b/turtle.cabal
@@ -1,5 +1,5 @@
 Name: turtle
-Version: 1.4.2
+Version: 1.4.3
 Cabal-Version: >=1.10
 Build-Type: Simple
 License: BSD3
@@ -97,7 +97,7 @@
     Default-Language: Haskell2010
     Build-Depends:
         base    >= 4   && < 5   ,
-        doctest >= 0.7 && < 0.13
+        doctest >= 0.7 && < 0.14
 
 test-suite regression-broken-pipe
     Type: exitcode-stdio-1.0
