exitcode 0.1.0.10 → 0.2.0.0
raw patch · 3 files changed
+77/−44 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.Exitcode: liftExitcodeError :: Functor f => f (e, Int) -> a -> ExitcodeT f e a
- Control.Exitcode: liftExitcodeError0 :: Functor f => f Int -> ExitcodeT f () ()
- Control.Exitcode: runExitcode0 :: Exitcode0 -> Maybe Int
- Control.Exitcode: runExitcodeT0 :: Functor f => ExitcodeT0 f -> f (Maybe Int)
+ Control.Exitcode: exitfailureNeg1 :: forall (f :: Type -> Type) e a. Applicative f => e -> Int -> ExitcodeT f e a
+ Control.Exitcode: liftExitFailureNeg1 :: Functor f => f (e, Int) -> ExitcodeT f e a
+ Control.Exitcode: liftExitcodeFailure :: Functor f => f (e, Int) -> a -> ExitcodeT f e a
+ Control.Exitcode: liftExitcodeFailure0 :: Functor f => f Int -> ExitcodeT0 f
+ Control.Exitcode: maybeExitcode :: Exitcode0 -> Maybe Int
+ Control.Exitcode: maybeExitcodeT :: Functor f => ExitcodeT f e a -> f (Maybe Int)
Files
- changelog.md +4/−0
- exitcode.cabal +1/−1
- src/Control/Exitcode.hs +72/−43
changelog.md view
@@ -1,3 +1,7 @@+0.2.0.0++* some API updates+ 0.1.0.10 * moved to gitlab
exitcode.cabal view
@@ -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
src/Control/Exitcode.hs view
@@ -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"