{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -Wno-redundant-constraints #-}
module Effectful.Environment.Static
(
Environment,
Eff.Env.getArgs,
Eff.Env.getProgName,
#if MIN_VERSION_base(4,17,0)
executablePath,
#endif
Eff.Env.getExecutablePath,
Eff.Env.getEnv,
Eff.Env.lookupEnv,
Eff.Env.setEnv,
Eff.Env.unsetEnv,
Eff.Env.withArgs,
Eff.Env.withProgName,
Eff.Env.getEnvironment,
runEnvironment,
QueryExePath (..),
)
where
#if MIN_VERSION_base(4,17,0)
import Effectful (Eff, type (:>))
import Effectful.Dispatch.Static (unsafeEff_, HasCallStack)
import System.Environment qualified as Env
#endif
import Effectful.Environment (Environment, runEnvironment)
import Effectful.Environment qualified as Eff.Env
import Effectful.Environment.Utils (QueryExePath (NoQuery, QueryResult))
#if MIN_VERSION_base(4,17,0)
executablePath :: (Environment :> es, HasCallStack) => Eff es QueryExePath
executablePath :: forall (es :: [Effect]).
(Environment :> es, HasCallStack) =>
Eff es QueryExePath
executablePath = case Maybe (IO (Maybe FilePath))
Env.executablePath of
Maybe (IO (Maybe FilePath))
Nothing -> QueryExePath -> Eff es QueryExePath
forall a. a -> Eff es a
forall (f :: * -> *) a. Applicative f => a -> f a
pure QueryExePath
NoQuery
Just IO (Maybe FilePath)
io -> Maybe FilePath -> QueryExePath
QueryResult (Maybe FilePath -> QueryExePath)
-> Eff es (Maybe FilePath) -> Eff es QueryExePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO (Maybe FilePath) -> Eff es (Maybe FilePath)
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ IO (Maybe FilePath)
io
#endif