diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for streaming-postgresql-simple
 
+## 0.2.0.4  -- 2019-11-28
+
+* Support GHC 8.8
+
 ## 0.2.0.3  -- 2018-01-02
 
 * Inline the exception handling code. In `streaming-0.1` this was provided by
@@ -21,7 +25,7 @@
 
 The previous implementation would perform the necessary finalisation only if the
 stream was drained. Some handling was in-place such that exceptions wouldn't
-cause the stream to end prematurely, but this isn't enough. We now use 
+cause the stream to end prematurely, but this isn't enough. We now use
 `MonadResource` to register an action to drain the stream.
 
 Users should now wrap calls using `query` with `runResourceT`:
@@ -32,15 +36,15 @@
 
 ### Correctly deal with transactions in `stream`
 
-`stream` requires a transaction in order to function. If there isn't a 
+`stream` requires a transaction in order to function. If there isn't a
 transaction open, `stream` would create one, but if you manually called `commit`
-or `rollback` from within the stream, the internal state would become 
+or `rollback` from within the stream, the internal state would become
 inconsistent. This would lead to confusing error messages.
 
 We now watch the transaction state as we pull items out from the stream, and
 inform the user if the internal state is not what we expected. Further more,
 cleanup actions (commit/rolling back the transaction) now only happen if there
-is still a transaction open. 
+is still a transaction open.
 
 
 ## 0.1.0.0  -- 2017-02-02
diff --git a/Database/PostgreSQL/Simple/Streaming.hs b/Database/PostgreSQL/Simple/Streaming.hs
--- a/Database/PostgreSQL/Simple/Streaming.hs
+++ b/Database/PostgreSQL/Simple/Streaming.hs
@@ -323,17 +323,17 @@
                 (\_ -> ifInTransaction $ liftIO (commit conn))
                 (\_ -> go `onException` ifInTransaction (liftIO (rollback conn)))
       LibPQ.TransInTrans -> go
-      LibPQ.TransActive  -> fail "foldWithOpts FIXME:  PQ.TransActive"
+      LibPQ.TransActive  -> liftIO (fail "foldWithOpts FIXME:  PQ.TransActive")
          -- This _shouldn't_ occur in the current incarnation of
          -- the library,  as we aren't using libpq asynchronously.
          -- However,  it could occur in future incarnations of
          -- this library or if client code uses the Internal module
          -- to use raw libpq commands on postgresql-simple connections.
-      LibPQ.TransInError -> fail "foldWithOpts FIXME:  PQ.TransInError"
+      LibPQ.TransInError -> liftIO (fail "foldWithOpts FIXME:  PQ.TransInError")
          -- This should be turned into a better error message.
          -- It is probably a bad idea to automatically roll
          -- back the transaction and start another.
-      LibPQ.TransUnknown -> fail "foldWithOpts FIXME:  PQ.TransUnknown"
+      LibPQ.TransUnknown -> liftIO (fail "foldWithOpts FIXME:  PQ.TransUnknown")
          -- Not sure what this means.
   where
     ifInTransaction m = do
@@ -368,7 +368,7 @@
               stat <- liftIO (withConnection conn LibPQ.transactionStatus)
               case stat of
                 LibPQ.TransInTrans -> return ()
-                _ -> fail "Stream transaction prematurely aborted"
+                _ -> liftIO (fail "Stream transaction prematurely aborted")
 
               result <- liftIO (exec conn fetchQ)
               status <- liftIO (LibPQ.resultStatus result)
@@ -474,7 +474,9 @@
         unmask (Return q) = Return q
         unmask (Effect m) = Effect $ do
             -- retrieve base's unmask and apply to merged action
-            Masked unmaskVariant <- liftIO $ readIORef ioref
+            unmaskVariant <- liftIO $ do
+              Masked unmaskVariant <- readIORef ioref
+              return unmaskVariant
             unmaskVariant (m >>= chunk >>= return . unmask)
 
         -- merge adjacent actions in base monad
diff --git a/streaming-postgresql-simple.cabal b/streaming-postgresql-simple.cabal
--- a/streaming-postgresql-simple.cabal
+++ b/streaming-postgresql-simple.cabal
@@ -1,5 +1,5 @@
 name: streaming-postgresql-simple
-version: 0.2.0.3
+version: 0.2.0.4
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
@@ -22,12 +22,12 @@
     exposed-modules:
         Database.PostgreSQL.Simple.Streaming
     build-depends:
-        base >=4.9 && <4.11,
+        base >=4.9 && <4.14,
         bytestring >=0.10.8.1 && <0.11,
-        exceptions >=0.8.3 && <0.9,
+        exceptions >=0.8.3 && <0.11,
         postgresql-libpq >=0.9.2.0 && <0.10,
-        postgresql-simple >=0.5 && <0.6,
-        resourcet >=1.1.8.1 && <1.2,
+        postgresql-simple >=0.5 && <0.7,
+        resourcet >=1.1.8.1 && <1.3,
         safe-exceptions >=0.1.4.0 && <0.2,
         streaming >=0.1 && <0.3,
         transformers >=0.5.2.0 && <0.6
