diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.2.0.0
+
+* some API updates
+
 0.1.0.10
 
 * moved to gitlab
diff --git a/exitcode.cabal b/exitcode.cabal
--- a/exitcode.cabal
+++ b/exitcode.cabal
@@ -1,7 +1,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                   exitcode
-version:                0.1.0.10
+version:                0.2.0.0
 synopsis:               Monad transformer for exit codes
 description:
   Monad transformer for exit codes
diff --git a/src/Control/Exitcode.hs b/src/Control/Exitcode.hs
--- a/src/Control/Exitcode.hs
+++ b/src/Control/Exitcode.hs
@@ -20,21 +20,23 @@
 , exitsuccess0
 , exitfailure
 , exitfailure0
+, exitfailureNeg1
 , exitcodeValue
 , exitcodeValue0
 , fromExitCode
 , fromExitCode'
 , liftExitcode
-, liftExitcodeError
-, liftExitcodeError0
+, liftExitcodeFailure
+, liftExitcodeFailure0
+, liftExitFailureNeg1
 , hoistExitcode
 , embedExitcode
 , exitcode1
 -- * Extraction
 , runExitcodeT
-, runExitcodeT0
+, maybeExitcodeT
 , runExitcode
-, runExitcode0
+, maybeExitcode
 , runExitcodeT1
 , runExitcode1
 -- * Exceptions
@@ -54,7 +56,7 @@
 import Control.Applicative
     ( Applicative((<*>), pure, liftA2) )
 import Control.Category ( Category((.)) )
-import Control.Exception
+import Control.Exception ( try, Exception )
 import Control.Lens
     ( preview,
       view,
@@ -176,10 +178,27 @@
 exitfailure0 =
   exitfailure ()
 
+-- | Construct a failing exit code with the given status.
+-- If zero (0) is passed meaning success, use negative one (-1).
+--
+-- >>> exitfailureNeg1 "abc" 0 :: Exitcode String ()
+-- ExitcodeT (Identity (Left ("abc",-1)))
+--
+-- >>> exitfailureNeg1 "abc" 12 :: Exitcode String ()
+-- ExitcodeT (Identity (Left ("abc",12)))
+exitfailureNeg1 ::
+  Applicative f =>
+  e
+  -> Int
+  -> ExitcodeT f e a
+exitfailureNeg1 e n =
+  liftExitFailureNeg1 (pure (e, n))
+
 -- | Construct an exit code with the given status.
 -- Associate a value of type `e` with a failing exit code and a value of the type `a` with a success exit code.
 --
 -- If the given status is `0` then the exit code will succeed with unit.
+--
 -- >>> exitcodeValue 'x' 99 "abc" :: ExitcodeT Identity Char String
 -- ExitcodeT (Identity (Left ('x',99)))
 -- >>> exitcodeValue 'x' 0 "abc" :: ExitcodeT Identity Char String
@@ -191,7 +210,7 @@
   -> a
   -> ExitcodeT f e a
 exitcodeValue e n =
-  liftExitcodeError (pure (e, n))
+  liftExitcodeFailure (pure (e, n))
 
 -- | Construct an exit code with the given status.
 --
@@ -242,9 +261,9 @@
 -- ExitcodeT (MaybeT (Identity (Just (Left ((),99)))))
 -- >>> view exitCode (Identity ExitSuccess)
 -- ExitcodeT (MaybeT (Identity (Just (Right ()))))
--- >>> Control.Lens.review exitCode (exitfailure () 99) :: Identity ExitCode
+-- >>> review exitCode (exitfailure0 99) :: Identity ExitCode
 -- Identity (ExitFailure 99)
--- >>> Control.Lens.review exitCode exitsuccess0 :: Identity ExitCode
+-- >>> review exitCode exitsuccess0 :: Identity ExitCode
 -- Identity ExitSuccess
 exitCode ::
   (Functor f, Functor g) =>
@@ -274,7 +293,7 @@
 --
 -- >>> runExitcodeT exitsuccess0 :: Identity (Either ((), Int) ())
 -- Identity (Right ())
--- >>> runExitcodeT (exitfailure () 99) :: Identity (Either ((), Int) ())
+-- >>> runExitcodeT (exitfailure0 99) :: Identity (Either ((), Int) ())
 -- Identity (Left ((),99))
 runExitcodeT ::
   ExitcodeT f e a
@@ -284,22 +303,22 @@
 
 -- | Extract either the non-zero value or `Nothing`.
 --
--- >>> runExitcodeT0 exitsuccess0 :: Identity (Maybe Int)
+-- >>> maybeExitcodeT exitsuccess0 :: Identity (Maybe Int)
 -- Identity Nothing
--- >>> runExitcodeT0 (exitfailure () 99) :: Identity (Maybe Int)
+-- >>> maybeExitcodeT (exitfailure0 99) :: Identity (Maybe Int)
 -- Identity (Just 99)
-runExitcodeT0 ::
+maybeExitcodeT ::
   Functor f =>
-  ExitcodeT0 f
+  ExitcodeT f e a
   -> f (Maybe Int)
-runExitcodeT0 x =
+maybeExitcodeT x =
   preview (_Left . _2) <$> runExitcodeT x
 
 -- | Extract either the non-zero value or the success value.
 --
 -- >>> runExitcode exitsuccess0 :: Either ((), Int) ()
 -- Right ()
--- >>> runExitcode (exitfailure () 99) :: Either ((), Int) ()
+-- >>> runExitcode (exitfailure0 99) :: Either ((), Int) ()
 -- Left ((),99)
 runExitcode ::
   Exitcode e a
@@ -309,15 +328,15 @@
 
 -- | Extract either the non-zero value or `Nothing`.
 --
--- >>> runExitcode0 exitsuccess0 :: Maybe Int
+-- >>> maybeExitcode exitsuccess0 :: Maybe Int
 -- Nothing
--- >>> runExitcode0 (exitfailure () 99) :: Maybe Int
+-- >>> maybeExitcode (exitfailure0 99) :: Maybe Int
 -- Just 99
-runExitcode0 ::
+maybeExitcode ::
   Exitcode0
   -> Maybe Int
-runExitcode0 =
-  runIdentity . runExitcodeT0
+maybeExitcode =
+  runIdentity . maybeExitcodeT
 
 -- | Isomorphism to integer.
 --
@@ -339,15 +358,15 @@
 _ExitcodeInt =
   iso
     (\(ExitcodeT x) -> fmap (either (view _2) (\() -> 0)) x)
-    (\x -> liftExitcodeError (((),) <$> x) ())
+    (\x -> liftExitcodeFailure (((),) <$> x) ())
 
 -- | Setter to integer.
 --
--- >>> > preview _ExitcodeInt' (exitsuccess0 :: ExitcodeT [] () ())
+-- >>> preview _ExitcodeInt' (exitsuccess0 :: ExitcodeT0 [])
 -- Just 0
--- >>> preview _ExitcodeInt' (exitfailure0 99 :: ExitcodeT [] () ())
+-- >>> preview _ExitcodeInt' (exitfailure0 99 :: ExitcodeT0 [])
 -- Just 99
--- >>> preview _ExitcodeInt' (exitfailure0 0 :: ExitcodeT [] () ())
+-- >>> preview _ExitcodeInt' (exitfailure0 0 :: ExitcodeT0 [])
 -- Just 0
 -- >>> over _ExitcodeInt' (subtract 1) exitsuccess0 :: ExitcodeT0 Identity
 -- ExitcodeT (Identity (Left ((),-1)))
@@ -365,7 +384,7 @@
 
 -- | A traversal to exit failure.
 --
--- >>> preview _ExitFailure (exitfailure () 99 :: ExitcodeT0 Identity)
+-- >>> preview _ExitFailure (exitfailure0 99 :: ExitcodeT0 Identity)
 -- Just ((),99)
 -- >>> preview _ExitFailure (exitsuccess0 :: ExitcodeT0 Identity)
 -- Nothing
@@ -383,7 +402,7 @@
     (e, Int)
     (e', Int)
 _ExitFailure f (ExitcodeT x) =
-  ExitcodeT <$> traverse (either (\z -> runExitcodeT (liftExitcodeError (f z) ())) (pure . pure)) x
+  ExitcodeT <$> traverse (either (\z -> runExitcodeT (liftExitcodeFailure (f z) ())) (pure . pure)) x
 
 -- | A traversal over the associated failing value.
 --
@@ -393,7 +412,7 @@
 -- ExitcodeT (Identity (Left ("cba",99)))
 -- >>> over _ExitFailureError reverse (exitfailure "abc" 0) :: ExitcodeT Identity String ()
 -- ExitcodeT (Identity (Right ()))
--- >>> preview _ExitFailureError (exitfailure () 99 :: ExitcodeT0 Identity)
+-- >>> preview _ExitFailureError (exitfailure0 99 :: ExitcodeT0 Identity)
 -- Just ()
 -- >>> preview _ExitFailureError (exitsuccess0 :: ExitcodeT0 Identity)
 -- Nothing
@@ -415,11 +434,11 @@
 -- ExitcodeT (Identity (Right ()))
 -- >>> over _ExitSuccess (\x -> x) (exitfailure0 0)
 -- ExitcodeT (Identity (Right ()))
--- >>> preview _ExitSuccess (exitfailure () 99)
+-- >>> preview _ExitSuccess (exitfailure0 99)
 -- Nothing
 -- >>> preview _ExitSuccess exitsuccess0
 -- Just ()
--- >>> Control.Lens.review _ExitSuccess "abc" :: ExitcodeT Identity () String
+-- >>> review _ExitSuccess "abc" :: ExitcodeT Identity () String
 -- ExitcodeT (Identity (Right "abc"))
 _ExitSuccess ::
   Prism
@@ -452,13 +471,13 @@
 --
 -- >>> exitsuccess "abc" >>- \s -> exitsuccess (reverse s) :: ExitcodeT Identity () String
 -- ExitcodeT (Identity (Right "cba"))
--- >>> exitsuccess "abc" >>- \_ -> exitfailure () 99 :: ExitcodeT Identity () ()
+-- >>> exitsuccess "abc" >>- \_ -> exitfailure0 99 :: ExitcodeT0 Identity
 -- ExitcodeT (Identity (Left ((),99)))
 -- >>> exitfailure 'x' 99 >>- \_ -> exitsuccess "abc" :: ExitcodeT Identity Char String
 -- ExitcodeT (Identity (Left ('x',99)))
 -- >>> exitfailure 'x' 99 >>- \_ -> exitfailure 'y' 88 :: ExitcodeT Identity Char ()
 -- ExitcodeT (Identity (Left ('x',99)))
--- >>> let loop = loop in exitfailure () 99 >>- loop :: ExitcodeT Identity () ()
+-- >>> let loop = loop in exitfailure0 99 >>- loop :: ExitcodeT0 Identity
 -- ExitcodeT (Identity (Left ((),99)))
 instance Monad f => Bind (ExitcodeT f e) where
   (>>-) =
@@ -512,9 +531,9 @@
 
 -- |
 --
--- >>> duplicated (exitfailure () 0) :: ExitcodeT Identity () (ExitcodeT Identity () ())
+-- >>> duplicated (exitfailure0 0) :: ExitcodeT Identity () (ExitcodeT0 Identity)
 -- ExitcodeT (Identity (Right (ExitcodeT (Identity (Right ())))))
--- >>> duplicated (exitfailure () 99) :: ExitcodeT Identity () (ExitcodeT Identity () ())
+-- >>> duplicated (exitfailure0 99) :: ExitcodeT Identity () (ExitcodeT0 Identity)
 -- ExitcodeT (Identity (Right (ExitcodeT (Identity (Left ((),99))))))
 -- >>> duplicated (exitsuccess "abc") :: ExitcodeT Identity () (ExitcodeT Identity () String)
 -- ExitcodeT (Identity (Right (ExitcodeT (Identity (Right "abc")))))
@@ -578,21 +597,31 @@
 liftExitcode x =
   ExitcodeT (Right <$> x)
 
-liftExitcodeError ::
+liftExitcodeFailure ::
   Functor f =>
   f (e, Int)
   -> a
   -> ExitcodeT f e a
-liftExitcodeError x a =
+liftExitcodeFailure x a =
   ExitcodeT ((\(e, n) -> bool (Left (e, n)) (Right a) (n == 0)) <$> x)
 
-liftExitcodeError0 ::
+liftExitcodeFailure0 ::
   Functor f =>
   f Int
-  -> ExitcodeT f () ()
-liftExitcodeError0 x =
-  liftExitcodeError (((),) <$> x) ()
+  -> ExitcodeT0 f
+liftExitcodeFailure0 x =
+  liftExitcodeFailure (((),) <$> x) ()
 
+-- |
+--
+-- If the given exitcode is success (0), return a failure and make the exitcode negative one (-1).
+liftExitFailureNeg1 ::
+  Functor f =>
+  f (e, Int)
+  -> ExitcodeT f e a
+liftExitFailureNeg1 x =
+  ExitcodeT ((\(e, n) -> Left (e, bool n (-1) (n == 0))) <$> x)
+
 hoistExitcode ::
   (forall x. f x -> g x)
   -> ExitcodeT f e a
@@ -622,7 +651,7 @@
 -- ExitcodeT ("",Left ('x',99))
 -- >>> listen (exitsuccess 99 :: ExitcodeT ((,) String) () Int)
 -- ExitcodeT ("",Right (99,""))
--- >>> tell "abc" :: ExitcodeT ((,) String) () ()
+-- >>> tell "abc" :: ExitcodeT0 ((,) String)
 -- ExitcodeT ("abc",Right ())
 -- >>> pass (exitsuccess ('x', reverse)) :: ExitcodeT ((,) String) () Char
 -- ExitcodeT ("",Right 'x')
@@ -656,7 +685,7 @@
 -- ExitcodeT (Right (Left ('x',99)))
 -- >>> catchError (exitfailure 'x' 99) (exitfailure 'y') :: ExitcodeT (Either Int) Char ()
 -- ExitcodeT (Right (Left ('x',99)))
--- >>> catchError exitsuccess0 (\_ -> exitsuccess0) :: ExitcodeT (Either Int) () ()
+-- >>> catchError exitsuccess0 (\_ -> exitsuccess0) :: ExitcodeT0 (Either Int)
 -- ExitcodeT (Right (Right ()))
 instance MonadError e f => MonadError e (ExitcodeT f e') where
   throwError =
@@ -712,7 +741,7 @@
 --
 -- >>> runExitcodeT1 exitsuccess0
 -- Right ()
--- >>> runExitcodeT1 (exitfailure () 99) :: Identity (Either ((), Int) ())
+-- >>> runExitcodeT1 (exitfailure0 99) :: Identity (Either ((), Int) ())
 -- Identity (Left ((),99))
 -- >>> runExitcodeT1 (exitcode1 0 "abc") :: Identity (Either (String, Int) String)
 -- Identity (Right "abc")
@@ -728,7 +757,7 @@
 --
 -- >>> runExitcode1 exitsuccess0
 -- Right ()
--- >>> runExitcode1 (exitfailure () 99)
+-- >>> runExitcode1 (exitfailure0 99)
 -- Left ((),99)
 -- >>> runExitcode1 (exitcode1 0 "abc")
 -- Right "abc"
