    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 code :: 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