diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,8 @@
 # Changelog - amazonka-s3-streaming
 
+## 1.1.0.0
+ - Adds MonadFail constraints, thanks @utdemir
+
 ## 1.0.0.2
  - allow http-client 0.6
 
@@ -7,7 +10,7 @@
  - Update to support conduit >= 1.3 only.
 
 ## 0.2.0.5
-- Fix compatibility with 
+- Fix compatibility with
 
 ## 0.2.0.4
 - Make building s3upload executable optional
diff --git a/amazonka-s3-streaming.cabal b/amazonka-s3-streaming.cabal
--- a/amazonka-s3-streaming.cabal
+++ b/amazonka-s3-streaming.cabal
@@ -1,5 +1,5 @@
 name:                amazonka-s3-streaming
-version:             1.0.0.2
+version:             1.1.0.0
 synopsis:            Provides conduits to upload data to S3 using the Multipart API
 description:         Provides a conduit based streaming interface and a concurrent interface to
                      uploading data to S3 using the Multipart API. Also provides method to upload
@@ -14,13 +14,13 @@
 build-type:          Simple
 extra-source-files:  README.md, Changelog.md
 cabal-version:       >=1.10
-tested-with:         GHC == 8.0.* || == 8.2.2 || == 8.4.* || == 8.6.*
+tested-with:         GHC == 8.0.* || == 8.2.2 || == 8.4.* || == 8.6.* || == 8.8.*
 
 library
   hs-source-dirs:      src
   exposed-modules:     Network.AWS.S3.StreamingUpload
   default-language:    Haskell2010
-  build-depends:       base >= 4.6 && < 5
+  build-depends:       base >= 4.9 && < 5
                        , amazonka         >= 1.6        && < 1.7
                        , amazonka-core    >= 1.6        && < 1.7
                        , amazonka-s3      >= 1.6        && < 1.7
diff --git a/src/Network/AWS/S3/StreamingUpload.hs b/src/Network/AWS/S3/StreamingUpload.hs
--- a/src/Network/AWS/S3/StreamingUpload.hs
+++ b/src/Network/AWS/S3/StreamingUpload.hs
@@ -33,6 +33,7 @@
 import Control.Applicative
 import Control.Category           ( (>>>) )
 import Control.Monad              ( forM_, when, (>=>) )
+import Control.Monad.Fail         ( MonadFail )
 import Control.Monad.IO.Class     ( MonadIO, liftIO )
 import Control.Monad.Morph        ( lift )
 import Control.Monad.Reader.Class ( local )
@@ -84,7 +85,7 @@
 
 May throw 'Network.AWS.Error'
 -}
-streamUpload :: (MonadUnliftIO m, MonadAWS m)
+streamUpload :: (MonadUnliftIO m, MonadAWS m, MonadFail m)
              => Maybe ChunkSize -- ^ Optional chunk size
              -> CreateMultipartUpload -- ^ Upload location
              -> ConduitT ByteString Void m (Either (AbortMultipartUploadResponse, SomeException) CompleteMultipartUploadResponse)
@@ -133,7 +134,7 @@
                     & cMultipartUpload ?~ set cmuParts prts completedMultipartUpload
 
 
-      performUpload :: MonadAWS m => Int -> Int -> Digest SHA256 -> D.DList ByteString -> m UploadPartResponse
+      performUpload :: (MonadAWS m, MonadFail m) => Int -> Int -> Digest SHA256 -> D.DList ByteString -> m UploadPartResponse
       performUpload pnum size digest =
         D.toList
         >>> sourceList
@@ -143,7 +144,7 @@
         >>> send
         >=> checkUpload
 
-      checkUpload :: (Monad m) => UploadPartResponse -> m UploadPartResponse
+      checkUpload :: (Monad m, MonadFail m) => UploadPartResponse -> m UploadPartResponse
       checkUpload upr = do
         when (upr ^. uprsResponseStatus /= 200) $ fail "Failed to upload piece"
         return upr
@@ -173,7 +174,7 @@
 multipart upload on any error, but this may also fail if, for example, the network
 connection has been broken. See `abortAllUploads` for a crude cleanup method.
 -}
-concurrentUpload :: (MonadAWS m)
+concurrentUpload :: (MonadAWS m, MonadFail m)
                  => Maybe ChunkSize -- ^ Optional chunk size
                  -> Maybe NumThreads -- ^ Optional number of threads to upload with
                  -> UploadLocation -- ^ Whether to upload a file on disk or a `ByteString` that's already in memory.
