-- | Unlifted "System.Environment".
--
-- @since 0.2.5.0
module UnliftIO.Environment
  ( getArgs
  , getProgName
  , getExecutablePath
  , getEnv
  , lookupEnv
  , setEnv
  , unsetEnv
  , withArgs
  , withProgName
  , getEnvironment
  ) where

import Control.Monad.IO.Unlift
import qualified System.Environment as E

-- | Lifted 'E.getArgs'.
--
-- @since 0.2.5.0
{-# INLINE getArgs #-}
getArgs :: MonadIO m => m [String]
getArgs :: forall (m :: * -> *). MonadIO m => m [String]
getArgs = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO [String]
E.getArgs

-- | Lifted 'E.getProgName'.
--
-- @since 0.2.5.0
{-# INLINE getProgName #-}
getProgName :: MonadIO m => m String
getProgName :: forall (m :: * -> *). MonadIO m => m String
getProgName = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO String
E.getProgName

-- | Lifted 'E.getExecutablePath'.
--
-- @since 0.2.5.0
{-# INLINE getExecutablePath #-}
getExecutablePath :: MonadIO m => m FilePath
getExecutablePath :: forall (m :: * -> *). MonadIO m => m String
getExecutablePath = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO String
E.getExecutablePath

-- | Lifted 'E.getEnv'.
--
-- @since 0.2.5.0
{-# INLINE getEnv #-}
getEnv :: MonadIO m => String -> m String
getEnv :: forall (m :: * -> *). MonadIO m => String -> m String
getEnv = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
E.getEnv

-- | Lifted 'E.lookupEnv'.
--
-- @since 0.2.5.0
{-# INLINE lookupEnv #-}
lookupEnv :: MonadIO m => String -> m (Maybe String)
lookupEnv :: forall (m :: * -> *). MonadIO m => String -> m (Maybe String)
lookupEnv = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO (Maybe String)
E.lookupEnv

-- | Lifted 'E.setEnv'.
--
-- @since 0.2.5.0
{-# INLINE setEnv #-}
setEnv :: MonadIO m => String -> String -> m ()
setEnv :: forall (m :: * -> *). MonadIO m => String -> String -> m ()
setEnv String
key_ String
value_ = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (String -> String -> IO ()
E.setEnv String
key_ String
value_)

-- | Lifted 'E.unsetEnv'.
--
-- @since 0.2.5.0
{-# INLINE unsetEnv #-}
unsetEnv :: MonadIO m => String -> m ()
unsetEnv :: forall (m :: * -> *). MonadIO m => String -> m ()
unsetEnv = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO ()
E.unsetEnv

-- | Unlifted 'E.withArgs'.
--
-- @since 0.2.5.0
{-# INLINE withArgs #-}
withArgs :: MonadUnliftIO m => [String] -> m a -> m a
withArgs :: forall (m :: * -> *) a. MonadUnliftIO m => [String] -> m a -> m a
withArgs [String]
xs m a
act = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO (\forall a. m a -> IO a
u -> forall a. [String] -> IO a -> IO a
E.withArgs [String]
xs (forall a. m a -> IO a
u m a
act))

-- | Unlifted 'E.withProgName'.
--
-- @since 0.2.5.0
{-# INLINE withProgName #-}
withProgName :: MonadUnliftIO m => String -> m a -> m a
withProgName :: forall (m :: * -> *) a. MonadUnliftIO m => String -> m a -> m a
withProgName String
nm m a
act = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO (\forall a. m a -> IO a
u -> forall a. String -> IO a -> IO a
E.withProgName String
nm (forall a. m a -> IO a
u m a
act))

-- | Lifted 'E.getEnvironment'.
--
-- @since 0.2.5.0
{-# INLINE getEnvironment #-}
getEnvironment :: MonadIO m => m [(String, String)]
getEnvironment :: forall (m :: * -> *). MonadIO m => m [(String, String)]
getEnvironment = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO [(String, String)]
E.getEnvironment