diff --git a/Data/Vector.hs b/Data/Vector.hs
--- a/Data/Vector.hs
+++ b/Data/Vector.hs
@@ -173,7 +173,7 @@
 import Control.Monad ( MonadPlus(..), liftM, ap )
 import Control.Monad.ST ( ST )
 import Control.Monad.Primitive
-
+import qualified Control.Monad.Fail as Fail
 
 import Control.Monad.Zip
 
@@ -340,7 +340,12 @@
 
   {-# INLINE (>>=) #-}
   (>>=) = flip concatMap
+#if !(MIN_VERSION_base(4,13,0))
+  {-# INLINE fail #-}
+  fail = Fail.fail -- == \ _str -> empty
+#endif
 
+instance Fail.MonadFail Vector where
   {-# INLINE fail #-}
   fail _ = empty
 
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+Changes in version 0.12.0.3
+  * Add support for ghc >=8.8 monad fail
 Changes in version 0.12.0.2
   * Fixes issue #220, compact heap operations crashing on boxed vectors constructed
     using traverse.
diff --git a/vector.cabal b/vector.cabal
--- a/vector.cabal
+++ b/vector.cabal
@@ -1,5 +1,5 @@
 Name:           vector
-Version:        0.12.0.2
+Version:        0.12.0.3
 -- don't forget to update the changelog file!
 License:        BSD3
 License-File:   LICENSE
@@ -149,7 +149,8 @@
                , ghc-prim >= 0.2 && < 0.6
                , deepseq >= 1.1 && < 1.5
   if !impl(ghc > 8.0)
-    Build-Depends: semigroups >= 0.18 && < 0.19
+    Build-Depends: fail == 4.9.*
+                 , semigroups >= 0.18 && < 0.19
 
   Ghc-Options: -O2 -Wall
 
