stack-lib-0.1.0.0: src/Stack/Lib/LowerLevel/Runners.hs
module Stack.Lib.LowerLevel.Runners (
runStack,
runStackWithResolver,
RunStack(runStackWithGlobalOpts),
defaultGlobalOpts
)
where
import Stack.Prelude (RIO, runRIO)
import Stack.Types.Config (EnvConfig, Config, GlobalOpts(globalResolver, globalCompiler), lcConfig, lcLoadBuildConfig)
import Stack.Runners (loadConfigWithOpts)
import Stack.Setup (setupEnv)
import Stack.Lib.Type.Resolver (Resolver)
import Stack.Lib.LowerLevel.GlobalOpts (defaultGlobalOpts)
import Stack.Lib.Class.IsAbstractResolver (toAbstractResolver)
class RunStack config where
runStackWithGlobalOpts :: GlobalOpts -> RIO config a -> IO a
instance RunStack EnvConfig where
runStackWithGlobalOpts globalOpts rio = loadConfigWithOpts globalOpts f where
f loadConfig = do
buildConfig <- lcLoadBuildConfig loadConfig (globalCompiler globalOpts)
envConfig <- runRIO buildConfig (setupEnv Nothing)
runRIO envConfig rio
instance RunStack Config where
runStackWithGlobalOpts globalOpts rio = loadConfigWithOpts globalOpts f where
f loadConfig = runRIO (lcConfig loadConfig) rio
runStackWithResolver :: RunStack config => Resolver -> RIO config a -> IO a
runStackWithResolver resolver = runStackWithGlobalOpts defaultGlobalOpts{globalResolver = Just (toAbstractResolver resolver)}
runStack :: RunStack config => RIO config a -> IO a
runStack = runStackWithGlobalOpts defaultGlobalOpts