h*kxc1      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 1.2.0.0 Safe-Inferred"%'(-16 build-envTypes that support  . build-envLike  %, but also supporting symbolic paths. build-envTypes that support  . build-envLike  %, but also supporting symbolic paths. build-env+Abstract directory: installation directory. build-envAbstract directory: prefix. build-env.Abstract directory: fetched sources directory. build-envAbstract directory for logs. build-envAbstract temporary directory. build-envAbstract directory: package database directory (e.g. a directory containing a  package.conf file). build-envAbstract directory: package directory (e.g. a directory containing the .cabal file).  build-env:Abstract directory: project root for 'build-env' commands.  build-env.Abstract directory: current working directory.  build-envAn absolute path, or a reference to a path from the PATH environment variable.  build-envA path which is either absolute or relative to the given abstract* location specified by the from type parameter.7They are *symbolic*, which means we cannot perform any & until we interpret them (using e.g. ).  build-envA symbolic relative path, relative to an abstract location specified by the from type parameter.7They are *symbolic*, which means we cannot perform any & until we interpret them (using e.g. ). build-envA symbolic path, possibly relative to an abstract location specified by the from type parameter.7They are *symbolic*, which means we cannot perform any & until we interpret them (using e.g. ). build-envIs this symbolic path allowed to be absolute, or must it be relative? build-env0The path may be absolute, or it may be relative. build-envThe path must be relative. build-envA type-level symbolic name, to an abstract file or directory (e.g. the Cabal package directory). build-env%A file (with no further information). build-envThe abstract name of a directory or category of directories, e.g. the package directory or a source directory. build-env>Interpret a symbolic path with respect to the given directory.Use this function before directly interacting with the file system in order to take into account a working directory argument. build-envMake the given  absolute. build-envThis instance ensures we don't accidentally discard a symbolic path in a  1 operation due to the second path being absolute. (Recall that a  / b = b whenever b is absolute.)      57Configuration options for  build-env Safe-Inferred"%'(-16 1" build-env&Whether to use Posix or Windows style:for executables, ./prog vs prog.exe,for the path separator, : vs ;.% build-env5A counter to measure progress, as units are compiled.' build-envThe running count.( build-env&The maximum that we're counting up to.) build-envVerbosity level for the  build-env package.The default verbosity level is ` (1).+ build-env0How to handle deletion of temporary directories.. build-env1The appropriate stage at which to use a filepath./ build-envWe have just parsed filepaths. They need to be canonicalised before they can be used.0 build-env&The filepaths have been canonicalised.They are now suitable for preparatory build instructions, but not for performing the build.1 build-env0The paths are suitable for performing the build.2 build-env;The directory structure relevant to executing a build plan.3 build-envThe directory structure relevant to preparing and carrying out a build plan.5 build-env Input fetched sources directory.6 build-env!Output build directory structure.NB: this will be bottom in the case that we are outputing a shell script that uses variables.7 build-env=Hackage index-state specification, e.g. 2022-12-25T00:00:00Z.9 build-env Paths to the ghc and ghc-pkg executables.= build-env Path to the  cabal-install executable.@ build-envArguments to pass to all cabal invocations, before any cabal command.A build-envArguments specific to a unit.C build-env Arguments to Setup configure.D build-env Arguments to  Setup haddock. Nothing means: skip  Setup haddock.E build-env Arguments to ghc-pkg register.F build-env*A type synonym for command-line arguments.G build-env!What kind of semaphore to use in  ?H build-env Create a new , semaphore with the given number of tokens.I build-envCreate a new system semaphore with the given number of tokens, passing it to ghc invocations.J build-env0Use an existing system semaphore, passing it to ghc invocations.K build-envHow to execute a build plan.L build-envTopologically sort the cabal build plan, and build the packages in sequence.M build-envAsynchronously build all the packages, with each package waiting on its dependencies.N build-envBuild strategy for  .O build-env Execute the build plan in-place.P build-env,Output a build script that can be run later.Q build-env/Output path at which to write the build script.R build-envShould the output shell script use variables, or baked in paths?2The shell script will use the following variables:GHC, GHCPKG, SOURCES, PREFIX, DESTDIR.T build-envWhich ghc and ghc-pkg to use.U build-env Output build prefix (absolute).V build-envOutput installation directory destdir/prefix (absolute).W build-envDirectory in which to put logs.Y build-envWhich ghc and ghc-pkg to use.Z build-envOutput installation directory destdir/prefix (absolute).\ build-envRaw output build destdir (might be relative).] build-envRaw output build prefix (might be relative).b build-envA description of the kind of semaphore we are using to control concurrency.c build-envCanonicalise raw 3, computing the appropriate directory structure for preparing and executing a build, respectively. build-env0Get the flag corresponding to a verbosity, e.g. -v2. build-envWrite the text to stdout , and flush.l build-env9OS-dependent separator for the PATH environment variable.m build-envThe style associated with the OS the program is currently running on.M build-env4The kind of semaphore to use to control concurrency.NPOQRKMLGHIJbFABCDE9:;<=>?@7834562S[X\]YVZTUW./01c+,-)a`_^*defghijk%&'("#$mlNPOQRKMLGHIJbFABCDE9:;<=>?@7834562S[X\]YVZTUW./01c+,-)a`_^*a`_^defghijk%&'("#$mlParsing Cabal plans from the  plan.json file format Safe-Inferred"%&'(-16-" build-envThe type of a component, e.g. library, executable, test-suite... build-env$The name of a cabal component, e.g. lib:comp. build-envWhat's before the colon, e.g. lib, exe, setup... build-env!The actual name of the component. build-envA mapping from a package name to its flags, constraints, and components we want to build from it. build-env=Information about a unit: name, version, dependencies, flags. build-env8Information about a built-in pre-existing unit (such as base). build-env&A unique identifier for a unit, e.g. 1lens-5.2-1bfd85cb66d2330e59a2f957e87cac993d922401. build-env!The source location of a package.Nothing.: it's in the package database (e.g. Hackage).Just fp: specified by the cabal file at the given path. build-env%Specification of package flags, e.g.  +foo -bar.+ corresponds to True and - to False. build-env(A collection of cabal constraints, e.g. >= 3.2 && < 3.4, in raw textual format. build-env$Constraints and flags for a package. build-env;A mapping from a package name to its flags and constraints. build-env1A collection of allow-newer specifications, e.g. pkg1:pkg2,*:base. build-envA cabal package name, e.g. lens, aeson. build-envBinary data underlying a cabal  plan.json file. build-envUnits in a Cabal  plan.json file. build-env Decode a  into a . build-envThe  name-version string of a package. build-envIs the string a valid cabal package name? That is, does it consist only of alphanumeric identifiers and hyphens? build-env'A Cabal mangled package name, in which - has been replaced with _. build-env%No flags or constraints on a package. build-env,Parse flags and constraints (in that order). build-envLeft-biased union of two sets of packages, overriding flags and constraints of the second argument with those provided in the first argument. build-env Combine two !. Combines constraints and flags. build-env3Left-biased union of package flags and constraints. build-env)Get what kind of component this unit is: lib, exe, etc. build-env All the dependencies of a unit: depends,  exe-depends and  setup-depends. build-env&The dependencies of a unit, excluding  setup-depends. build-env+Print a cabal component using colon syntax ty:comp. build-env2Parse a cabal package component, using the syntax  pkg:ty:comp, e.g. "attoparsec:lib:attoparsec-internal. build-envPrint the cabal component type as expected in cabal colon syntax  pkg:ty:comp. build-envParse the type of a cabal) component, e.g library, executable, etc. build-envCombine two constraints using &&.#Parse packages and units from files Safe-Inferred"%'(-63 build-env$Parse constrained packages from the  constraints stanza of the  cabal.config file at the given filepath: 7constraints: pkg1 ==ver1, pkg2 ==ver2, ...3This function disregards all other contents of the  cabal.config package. build-envParse a  and  from a line in a  cabal.config file.-Assumes whitespace has already been stripped. build-env,Parse a seed file. Each line must either be:A Cabal unit, in the format "unit +flag1 -flag2 >= 0.1 && < 0.3.A unit can be of the form pkgName,  lib:pkgName,  exe:pkgName, pkgName:lib:compName$, ... as per Cabal component syntax.*The unit name must be followed by a space.Flags and constraints are optional. When both are present, flags must precede constraints. Constraints must use valid Cabal constraint syntax.#An allow-newer specification, e.g. !allow-newer: pkg1:pkg2,*:base,...1. This is not allowed to span multiple lines.Returns (units, allowNewer).Utilities for  build-env Safe-Inferred"%'(-016;{ build-env#Abstract acquire/release mechanism. build-env Arguments to  callProcess. build-envWorking directory. build-env"Absolute filepaths to add to PATH. build-env>Extra environment variables to add before running the command. build-envThe program to run.6If it's a relative path, it should be relative to the cwd field. build-envArguments to the program. build-envLog stdout to basePath.stdout and stderr to basePath.stderr. build-envLock to take when calling the process and waiting for it to return, to avoid contention in concurrent situations. build-envThe path of a program to run. build-env&An absolute path, or an executable in PATH. build-env!A relative path, relative to the from abstract location. build-env*Run a command and wait for it to complete.7Crashes if the process returns with non-zero exit code.See " for a description of the options. build-env:Add filepaths to the given key in a key/value environment. build-env3Perform an action with a fresh temporary directory. build-env Utility list  function. build-env3Create a semaphore-based acquire/release mechanism. build-env&No acquire/release mechanism required. build-env;Abstract acquire/release mechanism controlled by the given . build-envAbstract acquire/release mechanism controlled by the given system semaphore. build-envOptional counter. Used when the command fails, to report the progress that has been made so far. build-envwhether to delete the temporary directory after the action completes build-envdirectory name template build-envaction to perform build-env?the abstract semaphore to use, and extra arguments to pass to Setup configure for ghc+,-+,-Tiny build script DSL Safe-Inferred"%'(-16H' build-env8Whether to expand or escape variables in a shell script. build-env$Allow the shell to expand variables. build-env7Escape variables so that the shell doesn't expand them. build-envConfiguration options for a . build-envWhether we are outputting a shell script, so that we can know whether we should:)add quotes around command-line arguments?add ./7 to run an executable in the current working directory? build-env!Working directory for the script. build-env7Whether to use Posix or Windows style conventions. See ". build-envOptional: the total number of units we are building; used to report progress. build-env-How to interpret the build script: run it in ", or turn it into a shell script? build-envRun the build script in  build-envGenerate a shell script. build-envReplace various values with variables, so that they can be set before running the build script.Values:GHC and GHC-PKG,fetched sources directory SOURCES,PREFIX and DESTDIR. build-env A build step. build-env)Call a processs with the given arguments. build-envCreate the given directory. build-envLog a message to stdout. build-envReport one unit of progress. build-envWhether to log the progress to stdout. build-envA list of build steps. build-envBuild script monad. build-env/A build script: a list of build steps, given a  context. build-env'The empty build script: no build steps. build-env Retrieve the  from the  environment. build-envObtain the build steps of a . build-envDeclare a build step. build-env$Call a process with given arguments. build-envCreate the given directory. build-envLog a message. build-envReport one unit of progress. build-env*Configure a script to run on the host (in IO). build-envQuote a string, to avoid spaces causing the string to be interpreted as multiple arguments. build-env&Quote a command-line argument, if the " requires arguments to be quoted.No need to call this on the  or  fields of , as these will be quoted by the shell-script backend no matter what. build-env Execute a  in the  monad. build-envExecute a single  in the  monad. build-env.Obtain the textual contents of a build script. build-env&The underlying script of a build step. build-envAll the environment variables that a shell script using variables expects to be set. build-envA preamble that checks the required environment variables are defined. build-envCheck that the given environment variable is defined, giving an error message if it isn't (to avoid an error cascade). build-env+Optional: total to report progress against. build-envWorking directory. build-env+Optional counter to use to report progress. build-envThe build script to execute. build-env+Optional counter to use to report progress.$$*Configure, build and install a single unit Safe-Inferred"%'(-16U build-env The package  name-version string and its directory. build-envPackage  name-version string. build-envPackage directory. build-envThe package database directory. build-env(Installation package database directory. build-envSemaphore controlling access to the installation package database. build-env(Installation package database directory. build-envSetup a single package.*Returns a build script which compiles the Setup script. build-env Find the Setup.hs/ Setup.lhs# file to use, or create one using main = defaultMain if none exist. build-envReturn build steps to to configure, build and and installing the unit, including registering it in the package database if it is a library."You can run the build script with /, or you can turn it into a shell script with .Note: executing the build script will fail if the unit has already been registered in the package database. build-env The argument -package-id PKG_ID. build-env"The target to configure and build. build-env The argument --dependency=PKG:COMP=UNIT_ID.Used to specify the  of a dependency to the configure script. This allows us to perform a build using the specific dependencies we have available, ignoring any bounds in the cabal file. build-env,Look up a dependency in the full build plan.1Throws an error if the dependency can't be found. build-envCompute the paths of the package database directory we are going to use. build-envCompute the paths of the package database directory we are going to use, and create some semaphores to control access to it in order to avoid contention. build-env'Compute the package directory location. build-envCommand to run an executable located the current working directory. build-envAn environment containing the data directory paths for the given units. build-env"Overall build directory structure. build-env Package database directory (see ). build-envPackage directory (to find the Setup.hs). build-env Package directory (to build the Setup.hs). build-env#All dependencies in the build plan. build-envThe unit to build. build-env"Overall build directory structure. build-env Package database directory (see ). build-envThis package's directory (see ). build-envExtra arguments for this unit. build-env#All dependencies in the build plan. build-envThe unit to build. build-env file, specifying package constraints, flags and allow-newer. build-envThe contents of a dummy Cabal file with dependencies on the specified units (without any constraints). build-envFetch the sources of a  , calling  cabal get on each package and putting it into the correspondingly named and versioned subfolder of the specified directory (e.g. pkg-name-1.2.3). build-envCall  cabal get( to fetch a single package from Hackage. build-envBuild a . This will install all the packages in the plan by running their Setup scripts. Libraries will be registered into a local package database at installDir/package.conf. build-envSort the units in a  in dependency order. build-envTag units in a build plan: the first unit we compile in each package is tagged (with ) as having the responsibility to build the Setup executable for the package it belongs to, while other units in this same package are tagged with  uid, where uid is the unit which is responsible for building the Setup executable. build-envCompute the set of UnitIds that have already been installed, to avoid unnecessarily recompiling them.This set of already-installed units is computed by querying the following::Library: is it already registered in the package database?Executable: is there an executable of the correct name in the binary directory associated with the unit? build-env&Directory in which to put the sources. build-envWorking directory. Used to compute relative paths for local packages, and to choose a logging directory. build-envevent log directory build-envTrue <> resume a previously-started build, skipping over units that were already built.,This function will fail if this argument is False and one of the units has already been registered in the package database. build-env Just units : only build units and their transitive dependencies, instead of the full build plan. build-env0Extra arguments for each unit in the build plan.  build-envBuild plan to execute. build-env Just skip  = skip these already-built units.Nothing  = don't skip any units. build-env Just keep  = only return units that belong to the transitive closure of keep.Nothing  = return all units in the plan.     !"#$%&'()*+,-./012345567889:;<=>?@AABCDDEEFGHHIJKKLMNOPQRSTUVWXYZ[@\]^_`abcdefghijklmnopqrstuvwxyz{|}~ (build-env-1.2.0.0-7yVsAwQDR0iJzCHlZGm0d2 BuildEnv.PathBuildEnv.ConfigBuildEnv.CabalPlan BuildEnv.FileBuildEnv.UtilsBuildEnv.ScriptBuildEnv.BuildOneBuildEnv.Build build-envSystem.FilePath<.> buildPlanControl.Concurrent.QSemQSemparseCabalDotConfigPkgs parseSeedFileInstallPrefixFetchLogsTmpPkgDbPkgProjectCWD AbsolutePath SymbolicPath RelativePath FileOrDirFileDirmkSymbolicPathmkRelativePathmkAbsolutePath sameDirectorygetSymbolicPathgetAbsolutePathabsoluteSymbolicPathinterpretSymbolicPath makeAbsolute$fShowAbsolutePath$fFileLikeAbsolutePath$fFileLikeSymbolicPathX$fFileLikeList/$fPathLikeAbsolutePathSymbolicPathXAbsolutePath1$fPathLikeSymbolicPathXSymbolicPathXSymbolicPathX$fPathLikeListqList$fShowSymbolicPathXStyle PosixStyleWinStyleCounter$sel:counterRef:Counter$sel:counterMax:Counter VerbosityTempDirPermanenceDeleteTempDirsDon'tDeleteTempDirs PathUsabilityRawForPrepForBuild BuildPathsPaths$sel:fetchDir:Paths$sel:buildPaths:Paths IndexStateCompiler$sel:ghcPath:Compiler$sel:ghcPkgPath:CompilerCabal$sel:cabalPath:Cabal$sel:globalCabalArgs:CabalUnitArgs$sel:configureArgs:UnitArgs$sel:mbHaddockArgs:UnitArgs$sel:registerArgs:UnitArgsArgsAsyncSemNewQSemNewJSem ExistingJSem RunStrategyTopoSortAsync BuildStrategyExecuteScript$sel:scriptPath:Execute$sel:useVariables:Execute$sel:compiler:BuildPaths$sel:prefix:BuildPaths$sel:installDir:BuildPaths$sel:logDir:BuildPathsBuildPathsForPrep&$sel:compilerForPrep:BuildPathsForPrep!$sel:installDir:BuildPathsForPrep RawBuildPaths$sel:rawDestDir:RawBuildPaths$sel:rawPrefix:RawBuildPathsDebugVerboseNormalQuietsemDescriptioncanonicalizePathsquietMsg normalMsg verboseMsgdebugMsg ghcVerbosityghcPkgVerbositycabalVerbositysetupVerbosity pATHSeparator hostStyle $fEqVerbosity$fOrdVerbosity$fNumVerbosity$fShowVerbosity$fShowTempDirPermanence$fShowBuildPaths$fShowBuildPaths0$fShowBuildPaths1$fShowIndexState$fEqIndexState$fShowCompiler $fShowCabal$fShowUnitArgs$fShowBuildStrategy$fShowRunStrategy$fShowAsyncSem $fShowPaths ComponentTypeLibFLibExeTestBenchSetup ComponentName $sel:componentType:ComponentName $sel:componentName:ComponentName UnitSpecsConfiguredUnit$sel:puId:ConfiguredUnit$sel:puPkgName:ConfiguredUnit$sel:puVersion:ConfiguredUnit#$sel:puComponentName:ConfiguredUnit$sel:puFlags:ConfiguredUnit$sel:puDepends:ConfiguredUnit $sel:puExeDepends:ConfiguredUnit"$sel:puSetupDepends:ConfiguredUnit$sel:puPkgSrc:ConfiguredUnitPreexistingUnit$sel:puId:PreexistingUnit$sel:puPkgName:PreexistingUnit$sel:puVersion:PreexistingUnit$sel:puDepends:PreexistingUnitPlanUnitPU_Preexisting PU_ConfiguredUnitId$sel:unUnitId:UnitIdPkgSrcRemoteLocalFlagSpec ConstraintsPkgSpec$sel:psConstraints:PkgSpec$sel:psFlags:PkgSpecPkgSpecs AllowNewerPkgName$sel:unPkgName:PkgNameCabalPlanBinary CabalPlan$sel:planUnits:CabalPlanmapMaybePlanUnitsparsePlanBinarypkgNameVersionvalidPackageNamemangledPkgName emptyPkgSpec parsePkgSpecunionPkgSpecsOverridingunionUnitSpecsCombining showFlagSpecflagSpecIsEmptyplanUnitUnitIdplanUnitPkgNameplanUnitVersionconfiguredUnitMaybecuComponentType allDepends unitDependscabalComponentparsePkgComponentcabalComponentTypeparseComponentType$fSemigroupConstraints$fSemigroupPkgSpec$fFromJSONPkgSrc$fMonoidPkgSrc$fSemigroupPkgSrc$fFromJSONPlanUnit$fFromJSONCabalPlan$fShowCabalPlan$fShowPlanUnit$fShowConfiguredUnit$fEqComponentName$fOrdComponentName$fShowComponentName$fEqComponentType$fOrdComponentType$fShowComponentType$fShowPreexistingUnit $fShowUnitId $fEqUnitId $fOrdUnitId$fFromJSONUnitId$fFromJSONKeyUnitId $fShowPkgSrc $fShowPkgSpec$fShowFlagSpec $fEqFlagSpec $fOrdFlagSpec$fSemigroupFlagSpec$fMonoidFlagSpec$fFromJSONFlagSpec$fShowConstraints$fShowAllowNewer$fSemigroupAllowNewer$fMonoidAllowNewer $fShowPkgName $fEqPkgName $fOrdPkgName$fFromJSONPkgName$fFromJSONKeyPkgName AbstractSemwithAbstractSem CallProcessCPcwd extraPATH extraEnvVarsprogargs logBasePathsemProgPathAbsPathRelPath absProgPath relProgPathcallProcessInIO withTempDirsplitOnwithNewAbstractSemnoSem abstractQSem EscapeVars ExpandVars ScriptConfig scriptOutputscriptWorkingDir scriptStyle scriptTotal ScriptOutputRunShell useVariables BuildStep CreateDir LogMessageReportProgressoutputProgress BuildSteps BuildScriptM BuildScriptrunBuildScriptemptyBuildScriptaskScriptConfig buildStepsstep callProcess createDir logMessagereportProgress hostRunCfgquoteArgexecuteBuildScriptscript$fShowEscapeVars$fFunctorBuildScriptM$fApplicativeBuildScriptM$fMonadBuildScriptM$fMonoidBuildScriptM$fSemigroupBuildScriptMPkgDir$sel:pkgNameVer:PkgDir$sel:pkgDir:PkgDirPkgDbDirPkgDbDirForBuild#$sel:finalPkgDbDir:PkgDbDirForBuild#$sel:finalPkgDbSem:PkgDbDirForBuildPkgDbDirForPrep"$sel:finalPkgDbDir:PkgDbDirForPrep setupPackage buildUnitgetPkgDbDirForPrepgetPkgDbDirForBuild getPkgDirCabalFilesContents cabalContentsprojectContents computePlan cabalProjectContentsFromPackagescabalFileContentsFromPackages fetchPlanPathLikeFileLikeghc-prim GHC.TypesIO SymbolicPathX AllowAbsolute OnlyRelative verbosityFlagputMsg unionPkgSpecparseCabalDotConfigLineaugmentSearchPathbase abstractJSemtransformers-0.6.1.0Control.Monad.Trans.ReaderReaderTqexecuteBuildStep stepScriptallVarsvariablesHelpervariableHelper findSetupHs unitIdArg buildTarget dependencyArglookupDependency runCwdExedataDirsdummyPackageName dummyUnitId cabalFetchsortPlantagUnits GHC.MaybeNothingJustgetInstalledUnits