module RIO.Prelude.Exit
  ( exitFailure
  , exitSuccess
  , exitWith
  , System.Exit.ExitCode(..)
  ) where

import           Control.Monad.IO.Class
import qualified System.Exit ( ExitCode (..)
                             , exitFailure
                             , exitSuccess
                             , exitWith
                             )

-- | Lifted version of "System.Exit.exitFailure".
--
-- @since 0.1.9.0.
exitFailure :: MonadIO m => m a
exitFailure :: m a
exitFailure = IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO a
forall a. IO a
System.Exit.exitFailure

-- | Lifted version of "System.Exit.exitSuccess".
--
-- @since 0.1.9.0.
exitSuccess :: MonadIO m => m a
exitSuccess :: m a
exitSuccess = IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO a
forall a. IO a
System.Exit.exitSuccess

-- | Lifted version of "System.Exit.exitWith".
--
-- @since 0.1.9.0.
exitWith :: MonadIO m => System.Exit.ExitCode -> m a
exitWith :: ExitCode -> m a
exitWith ExitCode
code = IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> m a) -> IO a -> m a
forall a b. (a -> b) -> a -> b
$ ExitCode -> IO a
forall a. ExitCode -> IO a
System.Exit.exitWith ExitCode
code