diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for crypto-rng
 
+## 0.1.2.0  -- 2020-05-05
+
+* GHC-8.8 support (MonadFail) and ghc 8.10.1 support.
+
 ## 0.1.1.0  -- 2019-10-08
 
 * Added a 'MonadError' instance for 'CryptoRNGT'.
diff --git a/crypto-rng.cabal b/crypto-rng.cabal
--- a/crypto-rng.cabal
+++ b/crypto-rng.cabal
@@ -1,5 +1,5 @@
 name:                crypto-rng
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Cryptographic random number generator.
 
 description:         Convenient wrapper for the cryptographic random generator
@@ -14,7 +14,7 @@
 copyright:           Scrive AB
 category:            Crypto
 build-type:          Simple
-tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.2
+tested-with:         GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.3 || ==8.10.1
 extra-source-files:  ChangeLog.md
 cabal-version:       >=1.10
 
@@ -26,7 +26,7 @@
   exposed-modules:     Crypto.RNG
                        Crypto.RNG.Class
                        Crypto.RNG.Utils
-  build-depends:       base < 5,
+  build-depends:       base              >= 4.9    && < 5,
                        DRBG              >= 0.5.5  && < 0.6,
                        bytestring        >= 0.10.8 && < 0.11,
                        crypto-api        >= 0.13.2 && < 0.14,
diff --git a/src/Crypto/RNG.hs b/src/Crypto/RNG.hs
--- a/src/Crypto/RNG.hs
+++ b/src/Crypto/RNG.hs
@@ -43,13 +43,15 @@
   , withCryptoRNGState
   ) where
 
+import Prelude hiding (fail)
 import Control.Applicative
 import Control.Concurrent
 import Control.Monad.Base
-import Control.Monad.Catch
-import Control.Monad.Cont
-import Control.Monad.Except
-import Control.Monad.Reader
+import Control.Monad.Catch hiding (fail)
+import Control.Monad.Cont hiding (fail)
+import Control.Monad.Except hiding (fail)
+import Control.Monad.Fail (MonadFail(..))
+import Control.Monad.Reader hiding (fail)
 import Control.Monad.Trans.Control
 import Crypto.Random
 import Crypto.Random.DRBG
@@ -81,7 +83,7 @@
               -> IO ByteString
 randomBytesIO n (CryptoRNGState gv) = do
   liftIO $ modifyMVar gv $ \g -> do
-    (bs, g') <- either (fail "Crypto.GlobalRandom.genBytes") return $
+    (bs, g') <- either (const (fail "Crypto.GlobalRandom.genBytes")) return $
                 genBytes n g
     return (g', bs)
 
@@ -141,7 +143,7 @@
 newtype CryptoRNGT m a = CryptoRNGT { unCryptoRNGT :: InnerCryptoRNGT m a }
   deriving ( Alternative, Applicative, Functor, Monad
            , MonadBase b, MonadCatch, MonadError e, MonadIO, MonadMask, MonadPlus
-           , MonadThrow, MonadTrans )
+           , MonadThrow, MonadTrans, MonadFail )
 
 mapCryptoRNGT :: (m a -> n b) -> CryptoRNGT m a -> CryptoRNGT n b
 mapCryptoRNGT f m = withCryptoRNGState $ \s -> f (runCryptoRNGT s m)
