diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,7 +1,14 @@
+0.8.3
+=====
+
+  * Switched to `Control.Monad.Except`
+
+  * Dropped support for GHC < 7.10
+
 0.8.2
 =====
 
-  * Stopped using the deprecated stuff in `http-client{,-tls}`.
+  * Stopped using the deprecated stuff in `http-client{,-tls}`
 
 0.8.1
 =====
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2015, Matvey Aksenov
+Copyright (c) 2013-2016, Matvey Aksenov
 
 All rights reserved.
 
diff --git a/example/repl.hs b/example/repl.hs
new file mode 100644
--- /dev/null
+++ b/example/repl.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
+-- | A simple Groovy REPL (type :q to quit)
+--
+-- @
+-- >>> println "Hello, World!"
+-- Hello, World!
+-- >>> println 4 * 7
+-- 28
+-- @
+module Main (main) where
+
+#if __GLASGOW_HASKELL__ < 710
+import           Control.Applicative       -- base
+#endif
+import           Data.Text.Lazy (Text)     -- text
+import qualified Data.Text.Lazy.IO as Text -- text
+import           Env                       -- envparse
+import           Jenkins.Rest as Jenkins   -- libjenkins
+import qualified System.IO as IO           -- base
+
+
+main :: IO ()
+main = do
+  conf <- envConf
+  Right ()
+       <- Jenkins.run conf loop
+  return ()
+
+envConf :: IO Jenkins.Master
+envConf = Env.parse (desc "A simple Groovy REPL") $
+  Jenkins.Master <$> var str "JENKINS_URL"       (help "Jenkins URL")
+                 <*> var str "JENKINS_USERNAME"  (help "Jenkins username")
+                 <*> var str "JENKINS_API_TOKEN" (help "Jenkins API token")
+
+loop :: Jenkins ()
+loop = do
+  reply <- prompt
+  case reply of
+    ":q" -> return ()
+    _    -> do
+      res <- groovy reply
+      liftIO $ do Text.putStr res; flush;
+      loop
+
+prompt :: Jenkins Text
+prompt = liftIO $ do Text.putStr ">>> "; flush; Text.getLine
+
+flush :: IO ()
+flush = IO.hFlush IO.stdout
diff --git a/libjenkins.cabal b/libjenkins.cabal
--- a/libjenkins.cabal
+++ b/libjenkins.cabal
@@ -1,5 +1,5 @@
 name:                libjenkins
-version:             0.8.2
+version:             0.8.3
 synopsis:            Jenkins API interface
 description:         Jenkins API interface. It supports REST and Discovery APIs
 license:             BSD2
@@ -17,6 +17,7 @@
   example/rename-jobs.hs
   example/discover.hs
   example/running-jobs-count.hs
+  example/repl.hs
 cabal-version:       >= 1.10
 
 source-repository head
@@ -26,13 +27,13 @@
 source-repository this
   type:     git
   location: https://github.com/supki/libjenkins
-  tag:      0.8.2
+  tag:      0.8.3
 
 library
   default-language:
     Haskell2010
   build-depends:
-      base          >= 4.6 && < 5
+      base          >= 4.8 && < 5
     , async         >= 2.0
     , attoparsec    >= 0.12
     , bytestring    >= 0.9
@@ -44,12 +45,11 @@
     , http-types    >= 0.8
     , monad-control >= 0.3
     , profunctors   >= 4.2
-    , mtl           >= 2.1
+    , mtl           >= 2.2.1
     , network       >= 2.6
     , network-uri   >= 2.6
     , resourcet     >= 1.1
     , text          >= 0.11
-    , transformers
   hs-source-dirs:
     src
   exposed-modules:
diff --git a/src/Jenkins/Rest.hs b/src/Jenkins/Rest.hs
--- a/src/Jenkins/Rest.hs
+++ b/src/Jenkins/Rest.hs
@@ -41,7 +41,7 @@
 
 import qualified Control.Exception as Unlifted
 import           Control.Monad (void)
-import           Control.Monad.IO.Class (MonadIO(..))
+import           Control.Monad.Trans (MonadIO(..))
 import           Control.Monad.Trans.Control (MonadBaseControl(..))
 import           Control.Monad.Trans.Resource (MonadResource)
 import qualified Data.ByteString.Lazy as Lazy
diff --git a/src/Jenkins/Rest/Internal.hs b/src/Jenkins/Rest/Internal.hs
--- a/src/Jenkins/Rest/Internal.hs
+++ b/src/Jenkins/Rest/Internal.hs
@@ -31,11 +31,10 @@
 import qualified Control.Exception as Unlifted
 import           Control.Monad
 import           Control.Monad.Free.Church (liftF)
-import           Control.Monad.Error (MonadError(..))
-import           Control.Monad.IO.Class (MonadIO(..))
+import           Control.Monad.Except (MonadError(..))
 import           Control.Monad.Reader (MonadReader(..))
 import           Control.Monad.State (MonadState(..))
-import           Control.Monad.Trans.Class (MonadTrans(..))
+import           Control.Monad.Trans (MonadIO(..), MonadTrans(..))
 import           Control.Monad.Trans.Control (MonadBaseControl(..), control, liftBaseOp_)
 import           Control.Monad.Trans.Free.Church (FT, iterTM)
 import           Control.Monad.Trans.Resource (MonadResource)
