diff --git a/Control/Failure.hs b/Control/Failure.hs
--- a/Control/Failure.hs
+++ b/Control/Failure.hs
@@ -21,8 +21,10 @@
     ) where
 
 import Prelude hiding (catch)
-import Control.Exception (throw, catch, Exception, SomeException (..))
+import Control.Exception (throwIO, catch, Exception, SomeException (..))
 import Data.Typeable (Typeable)
+import Control.Monad.Trans.Error ()
+import Control.Monad.Trans.Class (MonadTrans (lift))
 
 class Monad f => Failure e f where
     failure :: e -> f v
@@ -35,7 +37,7 @@
     wrapFailure :: (forall eIn. Exception eIn => eIn -> e) -> f a -> f a
 instance Exception e => WrapFailure e IO where
     wrapFailure f m =
-        m `catch` \e@SomeException{} -> throw (f e)
+        m `catch` \e@SomeException{} -> throwIO (f e)
 
 class Try f where
   type Error f
@@ -58,9 +60,15 @@
 
 instance Failure e Maybe where failure _ = Nothing
 instance Failure e []    where failure _ = []
+instance Failure e (Either e) where failure = Left
 
 instance Exception e => Failure e IO where
-  failure = Control.Exception.throw
+  failure = throwIO
+
+-- | Instance for all monad transformers, simply lift the @failure@ into the
+-- base monad.
+instance (MonadTrans t, Failure e m, Monad (t m)) => Failure e (t m) where
+    failure = lift . failure
 
 -- not a monad or applicative instance Failure e (Either e) where failure = Left
 
diff --git a/failure.cabal b/failure.cabal
--- a/failure.cabal
+++ b/failure.cabal
@@ -1,5 +1,5 @@
 name: failure
-version: 0.1.0.1
+version: 0.1.1
 Cabal-Version:  >= 1.6
 build-type: Simple
 license: BSD3
@@ -13,7 +13,8 @@
 
 Library
   buildable: True
-  build-depends: base >= 4 && < 5
+  build-depends: base         >= 4   && < 5
+               , transformers >= 0.2 && < 0.3
   ghc-options: -Wall
 
   exposed-modules:
