exitcode-0.1.0.3: Monad transformer for exit codes
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Exitcode

Synopsis

Types

data ExitcodeT f a Source #

An exit code status where failing with a value `0` cannot be represented.

Transformer for either a non-zero exit code (Int) or a value :: a.

Instances

Instances details
MMonad ExitcodeT Source # 
Instance details

Defined in Control.Exitcode

Methods

embed :: forall (n :: Type -> Type) m b. Monad n => (forall a. m a -> ExitcodeT n a) -> ExitcodeT m b -> ExitcodeT n b #

MonadTrans ExitcodeT Source # 
Instance details

Defined in Control.Exitcode

Methods

lift :: Monad m => m a -> ExitcodeT m a #

MonadRWS r w s f => MonadRWS r w s (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

MonadReader r f => MonadReader r (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

ask :: ExitcodeT f r #

local :: (r -> r) -> ExitcodeT f a -> ExitcodeT f a #

reader :: (r -> a) -> ExitcodeT f a #

MonadState s f => MonadState s (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

get :: ExitcodeT f s #

put :: s -> ExitcodeT f () #

state :: (s -> (a, s)) -> ExitcodeT f a #

MonadError e f => MonadError e (ExitcodeT f) Source #
>>> throwError 99 :: ExitcodeT (Either Int) String
ExitcodeT (Left 99)
>>> catchError exitsuccess0 exitfailure0 :: ExitcodeT (Either Int) ()
ExitcodeT (Right (Right ()))
>>> catchError (exitfailure0 99) (\_ -> exitsuccess0) :: ExitcodeT (Either Int) ()
ExitcodeT (Right (Left 99))
>>> catchError (exitfailure0 99) exitfailure0 :: ExitcodeT (Either Int) ()
ExitcodeT (Right (Left 99))
>>> catchError exitsuccess0 (\_ -> exitsuccess0) :: ExitcodeT (Either Int) ()
ExitcodeT (Right (Right ()))
Instance details

Defined in Control.Exitcode

Methods

throwError :: e -> ExitcodeT f a #

catchError :: ExitcodeT f a -> (e -> ExitcodeT f a) -> ExitcodeT f a #

MonadWriter w f => MonadWriter w (ExitcodeT f) Source #
>>> writer'' ('x', "abc")
ExitcodeT ("abc",Right 'x')
>>> listen (exitfailure0 99 :: ExitcodeT ((,) String) ())
ExitcodeT ("",Left 99)
>>> listen (exitsuccess 99 :: ExitcodeT ((,) String) Int)
ExitcodeT ("",Right (99,""))
>>> tell "abc" :: ExitcodeT ((,) String) ()
ExitcodeT ("abc",Right ())
>>> pass (exitsuccess ('x', reverse)) :: ExitcodeT ((,) String) Char
ExitcodeT ("",Right 'x')
>>> pass (('x', reverse) <$ (exitfailure0 99 :: ExitcodeT ((,) String) ()))
ExitcodeT ("",Left 99)
Instance details

Defined in Control.Exitcode

Methods

writer :: (a, w) -> ExitcodeT f a #

tell :: w -> ExitcodeT f () #

listen :: ExitcodeT f a -> ExitcodeT f (a, w) #

pass :: ExitcodeT f (a, w -> w) -> ExitcodeT f a #

Monad f => Monad (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

(>>=) :: ExitcodeT f a -> (a -> ExitcodeT f b) -> ExitcodeT f b #

(>>) :: ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f b #

return :: a -> ExitcodeT f a #

Functor f => Functor (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

fmap :: (a -> b) -> ExitcodeT f a -> ExitcodeT f b #

(<$) :: a -> ExitcodeT f b -> ExitcodeT f a #

Monad f => Applicative (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

pure :: a -> ExitcodeT f a #

(<*>) :: ExitcodeT f (a -> b) -> ExitcodeT f a -> ExitcodeT f b #

liftA2 :: (a -> b -> c) -> ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f c #

(*>) :: ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f b #

(<*) :: ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f a #

Foldable f => Foldable (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

fold :: Monoid m => ExitcodeT f m -> m #

foldMap :: Monoid m => (a -> m) -> ExitcodeT f a -> m #

foldMap' :: Monoid m => (a -> m) -> ExitcodeT f a -> m #

foldr :: (a -> b -> b) -> b -> ExitcodeT f a -> b #

foldr' :: (a -> b -> b) -> b -> ExitcodeT f a -> b #

foldl :: (b -> a -> b) -> b -> ExitcodeT f a -> b #

foldl' :: (b -> a -> b) -> b -> ExitcodeT f a -> b #

foldr1 :: (a -> a -> a) -> ExitcodeT f a -> a #

foldl1 :: (a -> a -> a) -> ExitcodeT f a -> a #

toList :: ExitcodeT f a -> [a] #

null :: ExitcodeT f a -> Bool #

length :: ExitcodeT f a -> Int #

elem :: Eq a => a -> ExitcodeT f a -> Bool #

maximum :: Ord a => ExitcodeT f a -> a #

minimum :: Ord a => ExitcodeT f a -> a #

sum :: Num a => ExitcodeT f a -> a #

product :: Num a => ExitcodeT f a -> a #

Traversable f => Traversable (ExitcodeT f) Source #
>>> traverse id [exitfailure0 99] :: ExitcodeT Identity [()]
ExitcodeT (Identity (Left 99))
>>> traverse id [exitfailure0 99, exitsuccess0] :: ExitcodeT Identity [()]
ExitcodeT (Identity (Left 99))
>>> traverse id [exitfailure0 99, exitsuccess0, exitfailure0 88] :: ExitcodeT Identity [()]
ExitcodeT (Identity (Left 99))
>>> traverse id [exitsuccess0, exitfailure0 88] :: ExitcodeT Identity [()]
ExitcodeT (Identity (Left 88))
>>> traverse id [exitsuccess0] :: ExitcodeT Identity [()]
ExitcodeT (Identity (Right [()]))
Instance details

Defined in Control.Exitcode

Methods

traverse :: Applicative f0 => (a -> f0 b) -> ExitcodeT f a -> f0 (ExitcodeT f b) #

sequenceA :: Applicative f0 => ExitcodeT f (f0 a) -> f0 (ExitcodeT f a) #

mapM :: Monad m => (a -> m b) -> ExitcodeT f a -> m (ExitcodeT f b) #

sequence :: Monad m => ExitcodeT f (m a) -> m (ExitcodeT f a) #

Eq1 f => Eq1 (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

liftEq :: (a -> b -> Bool) -> ExitcodeT f a -> ExitcodeT f b -> Bool #

Ord1 f => Ord1 (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

liftCompare :: (a -> b -> Ordering) -> ExitcodeT f a -> ExitcodeT f b -> Ordering #

Show1 f => Show1 (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> ExitcodeT f a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [ExitcodeT f a] -> ShowS #

MonadIO f => MonadIO (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

liftIO :: IO a -> ExitcodeT f a #

Monad f => Apply (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

(<.>) :: ExitcodeT f (a -> b) -> ExitcodeT f a -> ExitcodeT f b #

(.>) :: ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f b #

(<.) :: ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f a #

liftF2 :: (a -> b -> c) -> ExitcodeT f a -> ExitcodeT f b -> ExitcodeT f c #

MonadCont f => MonadCont (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

callCC :: ((a -> ExitcodeT f b) -> ExitcodeT f a) -> ExitcodeT f a #

Monad f => Alt (ExitcodeT f) Source # 
Instance details

Defined in Control.Exitcode

Methods

(<!>) :: ExitcodeT f a -> ExitcodeT f a -> ExitcodeT f a #

some :: Applicative (ExitcodeT f) => ExitcodeT f a -> ExitcodeT f [a] #

many :: Applicative (ExitcodeT f) => ExitcodeT f a -> ExitcodeT f [a] #

Monad f => Bind (ExitcodeT f) Source #
>>> exitsuccess "abc" >>= \s -> exitsuccess (reverse s) :: ExitcodeT Identity String
ExitcodeT (Identity (Right "cba"))
>>> exitsuccess "abc" >>= \_ -> exitfailure0 99 :: ExitcodeT Identity ()
ExitcodeT (Identity (Left 99))
>>> exitfailure0 99 >>= \_ -> exitsuccess "abc" :: ExitcodeT Identity String
ExitcodeT (Identity (Left 99))
>>> exitfailure0 99 >>= \_ -> exitfailure0 88 :: ExitcodeT Identity ()
ExitcodeT (Identity (Left 99))
>>> let loop = loop in exitfailure0 99 >>= loop :: ExitcodeT Identity ()
ExitcodeT (Identity (Left 99))
Instance details

Defined in Control.Exitcode

Methods

(>>-) :: ExitcodeT f a -> (a -> ExitcodeT f b) -> ExitcodeT f b #

join :: ExitcodeT f (ExitcodeT f a) -> ExitcodeT f a #

Extend f => Extend (ExitcodeT f) Source #
>>> duplicated (exitfailure0 99) :: ExitcodeT Identity (ExitcodeT Identity ())
ExitcodeT (Identity (Right (ExitcodeT (Identity (Left 99)))))
>>> duplicated (exitsuccess "abc") :: ExitcodeT Identity (ExitcodeT Identity String)
ExitcodeT (Identity (Right (ExitcodeT (Identity (Right "abc")))))
Instance details

Defined in Control.Exitcode

Methods

duplicated :: ExitcodeT f a -> ExitcodeT f (ExitcodeT f a) #

extended :: (ExitcodeT f a -> b) -> ExitcodeT f a -> ExitcodeT f b #

MFunctor ExitcodeT Source #
>>> hoist (\(Identity x) -> Just x) exitsuccess0
ExitcodeT (Just (Right ()))
>>> hoist (\(Identity x) -> Just x) (exitfailure0 99)
ExitcodeT (Just (Left 99))
Instance details

Defined in Control.Exitcode

Methods

hoist :: forall m n (b :: k). Monad m => (forall a. m a -> n a) -> ExitcodeT m b -> ExitcodeT n b #

(Eq1 f, Eq a) => Eq (ExitcodeT f a) Source # 
Instance details

Defined in Control.Exitcode

Methods

(==) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

(/=) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

(Ord1 f, Ord a) => Ord (ExitcodeT f a) Source # 
Instance details

Defined in Control.Exitcode

Methods

compare :: ExitcodeT f a -> ExitcodeT f a -> Ordering #

(<) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

(<=) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

(>) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

(>=) :: ExitcodeT f a -> ExitcodeT f a -> Bool #

max :: ExitcodeT f a -> ExitcodeT f a -> ExitcodeT f a #

min :: ExitcodeT f a -> ExitcodeT f a -> ExitcodeT f a #

(Show1 f, Show a) => Show (ExitcodeT f a) Source # 
Instance details

Defined in Control.Exitcode

Methods

showsPrec :: Int -> ExitcodeT f a -> ShowS #

show :: ExitcodeT f a -> String #

showList :: [ExitcodeT f a] -> ShowS #

Monad f => Semigroup (ExitcodeT f a) Source # 
Instance details

Defined in Control.Exitcode

Methods

(<>) :: ExitcodeT f a -> ExitcodeT f a -> ExitcodeT f a #

sconcat :: NonEmpty (ExitcodeT f a) -> ExitcodeT f a #

stimes :: Integral b => b -> ExitcodeT f a -> ExitcodeT f a #

Construction

exitsuccess :: Applicative f => a -> ExitcodeT f a Source #

Construct a succeeding exit code with the given value.

>>> exitsuccess "abc" :: ExitcodeT Identity String
ExitcodeT (Identity (Right "abc"))

exitsuccess0 :: Applicative f => ExitcodeT0 f Source #

Construct a succeeding exit code with unit.

>>> exitsuccess0 :: ExitcodeT0 Identity
ExitcodeT (Identity (Right ()))

exitfailure0 :: Applicative f => Int -> ExitcodeT0 f Source #

Construct a failing exit code with the given status.

If the given status is `0` then the exit code will succeed with unit.

>>> exitfailure0 99 :: ExitcodeT0 Identity
ExitcodeT (Identity (Left 99))

fromExitCode :: Functor f => f ExitCode -> ExitcodeT0 f Source #

From base exitcode.

>>> fromExitCode (Identity ExitSuccess)
ExitcodeT (Identity (Right ()))
>>> fromExitCode (Identity (ExitFailure 99))
ExitcodeT (Identity (Left 99))

fromExitCode' :: ExitCode -> Exitcode0 Source #

From base exitcode.

>>> fromExitCode' ExitSuccess
ExitcodeT (Identity (Right ()))
>>> fromExitCode' (ExitFailure 99)
ExitcodeT (Identity (Left 99))
>>> fromExitCode' (ExitFailure 0)
ExitcodeT (Identity (Right ()))

fromExitCodeValue :: Applicative f => Int -> a -> ExitcodeT f a Source #

>>> fromExitCodeValue 99 "abc" :: ExitcodeT Identity String
ExitcodeT (Identity (Left 99))
>>> fromExitCodeValue 0 "abc" :: ExitcodeT Identity String
ExitcodeT (Identity (Right "abc"))

Extraction

runExitcode :: ExitcodeT f a -> f (Either Int a) Source #

Extract either the non-zero value or the success value.

>>> runExitcode exitsuccess0 :: Identity (Either Int ())
Identity (Right ())
>>> runExitcode (exitfailure0 99) :: Identity (Either Int ())
Identity (Left 99)

Optics

exitCode :: (Functor f, Functor g) => Iso (f ExitCode) (g ExitCode) (ExitcodeT0 (MaybeT f)) (ExitcodeT0 (MaybeT g)) Source #

Isomorphism from base exitcode to underlying `Maybe (Either Int ())` where Int is non-zero.

>>> view exitCode (Identity (ExitFailure 99))
ExitcodeT (MaybeT (Identity (Just (Left 99))))
>>> view exitCode (Identity ExitSuccess)
ExitcodeT (MaybeT (Identity (Just (Right ()))))
>>> review exitCode (exitfailure0 99) :: Identity ExitCode
Identity (ExitFailure 99)
>>> review exitCode exitsuccess0 :: Identity ExitCode
Identity ExitSuccess

_ExitFailure :: Prism' Exitcode0 Int Source #

A prism to exit failure.

>>> preview _ExitFailure (exitfailure0 99)
Just 99
>>> preview _ExitFailure exitsuccess0
Nothing
>>> review _ExitFailure 99
ExitcodeT (Identity (Left 99))

_ExitSuccess :: Prism (Exitcode a) (Exitcode b) a b Source #

A prism to exit success.

>>> preview _ExitSuccess (exitfailure0 99)
Nothing
>>> preview _ExitSuccess exitsuccess0
Just ()
>>> review _ExitSuccess "abc"
ExitcodeT (Identity (Right "abc"))