diff --git a/CHANGELOG.rst b/CHANGELOG.rst
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -7,6 +7,31 @@
 .. _PVP: https://pvp.haskell.org/
 
 
+1.8.0.0 (2019-10-04)
+--------------------
+
+* Git: :tag:`concurrency-1.8.0.0`
+* Hackage: :hackage:`concurrency-1.8.0.0`
+
+Added
+~~~~~
+
+* ``MonadFail`` instances for ``Control.Monad.Conc.Class.IsConc`` and
+  ``Control.Monad.STM.IsSTM``.
+
+Changed
+~~~~~~~
+
+* Added ``MonadFail`` constraints to
+  ``Control.Concurrent.Classy.QSem.newQSem`` and
+  ``Control.Concurrent.Classy.QSemN.newQSemN``.
+
+Miscellaneous
+~~~~~~~~~~~~~
+
+* Fixed a compilation error with GHC 8.8
+
+
 1.7.0.0 (2019-03-24)
 --------------------
 
diff --git a/Control/Concurrent/Classy/QSem.hs b/Control/Concurrent/Classy/QSem.hs
--- a/Control/Concurrent/Classy/QSem.hs
+++ b/Control/Concurrent/Classy/QSem.hs
@@ -17,6 +17,7 @@
 
 import           Control.Concurrent.Classy.QSemN
 import           Control.Monad.Conc.Class        (MonadConc)
+import           Control.Monad.Fail              (MonadFail)
 
 -- | @QSem@ is a quantity semaphore in which the resource is acquired
 -- and released in units of one. It provides guaranteed FIFO ordering
@@ -35,7 +36,7 @@
 -- quantity must be at least 0.
 --
 -- @since 1.0.0.0
-newQSem :: MonadConc m => Int -> m (QSem m)
+newQSem :: (MonadConc m, MonadFail m) => Int -> m (QSem m)
 newQSem initial
   | initial < 0 = fail "newQSem: Initial quantity mus tbe non-negative."
   | otherwise   = QSem <$> newQSemN initial
diff --git a/Control/Concurrent/Classy/QSemN.hs b/Control/Concurrent/Classy/QSemN.hs
--- a/Control/Concurrent/Classy/QSemN.hs
+++ b/Control/Concurrent/Classy/QSemN.hs
@@ -20,6 +20,7 @@
 import           Control.Monad.Catch            (mask_, onException,
                                                  uninterruptibleMask_)
 import           Control.Monad.Conc.Class       (MonadConc)
+import           Control.Monad.Fail             (MonadFail)
 import           Data.Maybe
 
 -- | 'QSemN' is a quantity semaphore in which the resource is aqcuired
@@ -39,7 +40,7 @@
 --  The initial quantity must be at least 0.
 --
 -- @since 1.0.0.0
-newQSemN :: MonadConc m => Int -> m (QSemN m)
+newQSemN :: (MonadConc m, MonadFail m) => Int -> m (QSemN m)
 newQSemN initial
   | initial < 0 = fail "newQSemN: Initial quantity must be non-negative"
   | otherwise   = QSemN <$> newMVar (initial, [], [])
diff --git a/Control/Monad/Conc/Class.hs b/Control/Monad/Conc/Class.hs
--- a/Control/Monad/Conc/Class.hs
+++ b/Control/Monad/Conc/Class.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TypeFamilies #-}
 
 -- |
@@ -12,7 +13,7 @@
 -- License     : MIT
 -- Maintainer  : Michael Walker <mike@barrucadu.co.uk>
 -- Stability   : experimental
--- Portability : CPP, FlexibleContexts, PolyKinds, RankNTypes, ScopedTypeVariables, TypeFamilies
+-- Portability : CPP, FlexibleContexts, PolyKinds, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeFamilies
 --
 -- This module captures in a typeclass the interface of concurrency
 -- monads.
@@ -94,6 +95,7 @@
 import           Control.Monad.Catch          (MonadCatch, MonadMask,
                                                MonadThrow)
 import qualified Control.Monad.Catch          as Ca
+import           Control.Monad.Fail           (MonadFail(..))
 import           Control.Monad.STM.Class      (IsSTM, MonadSTM, TVar, fromIsSTM,
                                                readTVar)
 import           Control.Monad.Trans.Control  (MonadTransControl, StT, liftWith)
@@ -790,6 +792,9 @@
 -- @since 1.2.2.0
 newtype IsConc m a = IsConc { unIsConc :: m a }
   deriving (Functor, Applicative, Monad, MonadThrow, MonadCatch, MonadMask)
+
+-- | @since 1.8.0.0
+deriving instance MonadFail m => MonadFail (IsConc m)
 
 -- | Wrap an @m a@ value inside an @IsConc@ if @m@ has a @MonadConc@
 -- instance.
diff --git a/Control/Monad/STM/Class.hs b/Control/Monad/STM/Class.hs
--- a/Control/Monad/STM/Class.hs
+++ b/Control/Monad/STM/Class.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TypeFamilies #-}
 
 -- |
@@ -9,7 +10,7 @@
 -- License     : MIT
 -- Maintainer  : Michael Walker <mike@barrucadu.co.uk>
 -- Stability   : experimental
--- Portability : CPP, RankNTypes, TemplateHaskell, TypeFamilies
+-- Portability : CPP, RankNTypes, StandaloneDeriving, TemplateHaskell, TypeFamilies
 --
 -- This module provides an abstraction over 'STM', which can be used
 -- with 'MonadConc'.
@@ -62,6 +63,7 @@
 import           Control.Applicative          (Alternative(..))
 import           Control.Exception            (Exception)
 import           Control.Monad                (MonadPlus(..), unless)
+import           Control.Monad.Fail           (MonadFail(..))
 import           Control.Monad.Reader         (ReaderT)
 import           Control.Monad.Trans          (lift)
 import           Control.Monad.Trans.Identity (IdentityT)
@@ -184,6 +186,9 @@
 -- @since 1.2.2.0
 newtype IsSTM m a = IsSTM { unIsSTM :: m a }
   deriving (Functor, Applicative, Alternative, Monad, MonadPlus, Ca.MonadThrow, Ca.MonadCatch)
+
+-- | @since 1.8.0.0
+deriving instance MonadFail m => MonadFail (IsSTM m)
 
 -- | Wrap an @m a@ value inside an @IsSTM@ if @m@ has a @MonadSTM@
 -- instance.
diff --git a/concurrency.cabal b/concurrency.cabal
--- a/concurrency.cabal
+++ b/concurrency.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                concurrency
-version:             1.7.0.0
+version:             1.8.0.0
 synopsis:            Typeclasses, functions, and data types for concurrency and STM.
 
 description:
@@ -32,7 +32,7 @@
 source-repository this
   type:     git
   location: https://github.com/barrucadu/dejafu.git
-  tag:      concurrency-1.7.0.0
+  tag:      concurrency-1.8.0.0
 
 library
   exposed-modules:     Control.Monad.Conc.Class
