stack-1.5.1: The Haskell Tool Stack

Safe HaskellNone
LanguageHaskell2010

Stack.Config

Description

The general Stack configuration that starts everything off. This should be smart to falback if there is no stack.yaml, instead relying on whatever files are available.

If there is no stack.yaml, and there is a cabal.config, we read in those constraints, and if there's a cabal.sandbox.config, we read any constraints from there and also find the package database from there, etc. And if there's nothing, we should probably default to behaving like cabal, possibly with spitting out a warning that "you should run `stk init` to make things better".

Synopsis

Documentation

loadConfig Source #

Arguments

:: StackM env m 
=> ConfigMonoid

Config monoid from parsed command-line arguments

-> Maybe AbstractResolver

Override resolver

-> StackYamlLoc (Path Abs File)

Override stack.yaml

-> m (LoadConfig m) 

Load the configuration, using current directory, environment variables, and defaults as necessary. The passed Maybe (Path Abs File) is an override for the location of the project's stack.yaml.

loadConfigMaybeProject Source #

Arguments

:: StackM env m 
=> ConfigMonoid

Config monoid from parsed command-line arguments

-> Maybe AbstractResolver

Override resolver

-> LocalConfigStatus (Project, Path Abs File, ConfigMonoid)

Project config to use, if any

-> m (LoadConfig m) 

loadConfigYaml :: (MonadIO m, MonadLogger m) => (Value -> Parser (WithJSONWarnings a)) -> Path Abs File -> m a Source #

Load and parse YAML from the given config file. Throws ParseConfigFileException when there's a decoding error.

getLocalPackages :: (StackMiniM env m, HasEnvConfig env) => m (Map (Path Abs Dir) TreatLikeExtraDep) Source #

Get packages from EnvConfig, downloading and cloning as necessary. If the packages have already been downloaded, this uses a cached value (

resolvePackageEntry Source #

Arguments

:: (StackMiniM env m, HasConfig env) 
=> EnvOverride 
-> Path Abs Dir

project root

-> PackageEntry 
-> m [(Path Abs Dir, TreatLikeExtraDep)] 

Resolve a PackageEntry into a list of paths, downloading and cloning as necessary.

getImplicitGlobalProjectDir :: (MonadIO m, MonadLogger m) => Config -> m (Path Abs Dir) Source #

Get the location of the implicit global project directory. If the directory already exists at the deprecated location, its location is returned. Otherwise, the new location is returned.

getStackYaml :: (StackMiniM env m, HasConfig env) => m (Path Abs File) Source #

This is slightly more expensive than asks (bcStackYaml . getBuildConfig) and should only be used when no BuildConfig is at hand.

getSnapshots :: (StackMiniM env m, HasConfig env) => m Snapshots Source #

Download the Snapshots value from stackage.org.

checkOwnership :: (MonadIO m, MonadCatch m) => Path Abs Dir -> m () Source #

checkOwnership dir throws UserDoesn'tOwnDirectory if dir isn't owned by the current user.

If dir doesn't exist, its parent directory is checked instead. If the parent directory doesn't exist either, NoSuchDirectory (parent dir) is thrown.

getInContainer :: MonadIO m => m Bool Source #

True if we are currently running inside a Docker container.

getInNixShell :: MonadIO m => m Bool Source #

True if we are currently running inside a Nix.

getProjectConfig Source #

Arguments

:: (MonadIO m, MonadThrow m, MonadLogger m) 
=> StackYamlLoc (Path Abs File)

Override stack.yaml

-> m (LocalConfigStatus (Path Abs File)) 

Get the location of the project config file, if it exists.

data LocalConfigStatus a Source #

Instances

Functor LocalConfigStatus Source # 
Foldable LocalConfigStatus Source # 

Methods

fold :: Monoid m => LocalConfigStatus m -> m #

foldMap :: Monoid m => (a -> m) -> LocalConfigStatus a -> m #

foldr :: (a -> b -> b) -> b -> LocalConfigStatus a -> b #

foldr' :: (a -> b -> b) -> b -> LocalConfigStatus a -> b #

foldl :: (b -> a -> b) -> b -> LocalConfigStatus a -> b #

foldl' :: (b -> a -> b) -> b -> LocalConfigStatus a -> b #

foldr1 :: (a -> a -> a) -> LocalConfigStatus a -> a #

foldl1 :: (a -> a -> a) -> LocalConfigStatus a -> a #

toList :: LocalConfigStatus a -> [a] #

null :: LocalConfigStatus a -> Bool #

length :: LocalConfigStatus a -> Int #

elem :: Eq a => a -> LocalConfigStatus a -> Bool #

maximum :: Ord a => LocalConfigStatus a -> a #

minimum :: Ord a => LocalConfigStatus a -> a #

sum :: Num a => LocalConfigStatus a -> a #

product :: Num a => LocalConfigStatus a -> a #

Traversable LocalConfigStatus Source # 

Methods

traverse :: Applicative f => (a -> f b) -> LocalConfigStatus a -> f (LocalConfigStatus b) #

sequenceA :: Applicative f => LocalConfigStatus (f a) -> f (LocalConfigStatus a) #

mapM :: Monad m => (a -> m b) -> LocalConfigStatus a -> m (LocalConfigStatus b) #

sequence :: Monad m => LocalConfigStatus (m a) -> m (LocalConfigStatus a) #

Show a => Show (LocalConfigStatus a) Source # 

removePathFromPackageEntry Source #

Arguments

:: (StackMiniM env m, HasConfig env) 
=> EnvOverride 
-> Path Abs Dir

project root

-> Path Abs Dir

path to remove

-> PackageEntry 
-> m (Maybe PackageEntry)

Nothing if the whole package entry should be removed, otherwise it returns the updated PackageEntry

Remove path from package entry. If the package entry contains subdirs, then it removes the subdir. If the package entry points to the path to remove, this function returns Nothing. If the package entry doesn't mention the path to remove, it is returned unchanged