hix 0.7.1 → 0.7.2
raw patch · 51 files changed
+1021/−266 lines, 51 filesdep ~aesonPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson
API changes (from Hackage documentation)
- Hix.Bootstrap: [$sel:components:HixPackage] :: HixPackage -> [HixComponent]
- Hix.Bootstrap: [$sel:dep:PreludeWithVersion] :: PreludeWithVersion -> Maybe Dependency
- Hix.Bootstrap: [$sel:description:HixPackage] :: HixPackage -> ExprAttr
- Hix.Bootstrap: [$sel:info:CabalInfo] :: CabalInfo -> GenericPackageDescription
- Hix.Bootstrap: [$sel:known:HixComponent] :: HixComponent -> [ExprAttr]
- Hix.Bootstrap: [$sel:known:HixPackage] :: HixPackage -> [ExprAttr]
- Hix.Bootstrap: [$sel:meta:HixPackage] :: HixPackage -> [ExprAttr]
- Hix.Bootstrap: [$sel:name:HixPackage] :: HixPackage -> PackageName
- Hix.Bootstrap: [$sel:path:CabalInfo] :: CabalInfo -> Path Rel Dir
- Hix.Bootstrap: [$sel:prelude:HixComponent] :: HixComponent -> Maybe PreludeWithVersion
- Hix.Bootstrap: [$sel:prelude:PreludeWithVersion] :: PreludeWithVersion -> Prelude
- Hix.Bootstrap: [$sel:special:HixComponent] :: HixComponent -> ComponentType
- Hix.Bootstrap: [$sel:src:HixPackage] :: HixPackage -> Path Rel Dir
- Hix.Class.SOP: [$sel:name:FieldK] :: FieldK -> Symbol
- Hix.Class.SOP: [$sel:tpe:FieldK] :: FieldK -> Type
- Hix.Console: [$sel:black:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:blue:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:cyan:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:green:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:magenta:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:red:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:white:ColorOffsets] :: ColorOffsets -> Int
- Hix.Console: [$sel:yellow:ColorOffsets] :: ColorOffsets -> Int
- Hix.Data.BootstrapProjectConfig: [$sel:hixUrl:BootstrapProjectConfig] :: BootstrapProjectConfig -> HixUrl
- Hix.Data.ComponentConfig: [$sel:component:Target] :: Target -> ComponentConfig
- Hix.Data.ComponentConfig: [$sel:components:PackageConfig] :: PackageConfig -> Map ComponentName ComponentConfig
- Hix.Data.ComponentConfig: [$sel:extensions:ComponentConfig] :: ComponentConfig -> [String]
- Hix.Data.ComponentConfig: [$sel:ghcOptions:ComponentConfig] :: ComponentConfig -> [String]
- Hix.Data.ComponentConfig: [$sel:language:ComponentConfig] :: ComponentConfig -> String
- Hix.Data.ComponentConfig: [$sel:module_:PreludeConfig] :: PreludeConfig -> ModuleName
- Hix.Data.ComponentConfig: [$sel:name:ComponentConfig] :: ComponentConfig -> ComponentName
- Hix.Data.ComponentConfig: [$sel:name:PackageConfig] :: PackageConfig -> PackageName
- Hix.Data.ComponentConfig: [$sel:name:PreludePackageName] :: PreludePackage -> Text
- Hix.Data.ComponentConfig: [$sel:package:PreludeConfig] :: PreludeConfig -> PreludePackage
- Hix.Data.ComponentConfig: [$sel:package:Target] :: Target -> PackageConfig
- Hix.Data.ComponentConfig: [$sel:prelude:ComponentConfig] :: ComponentConfig -> Maybe PreludeConfig
- Hix.Data.ComponentConfig: [$sel:runner:ComponentConfig] :: ComponentConfig -> Maybe EnvRunner
- Hix.Data.ComponentConfig: [$sel:sourceDir:Target] :: Target -> Maybe SourceDir
- Hix.Data.ComponentConfig: [$sel:sourceDirs:ComponentConfig] :: ComponentConfig -> SourceDirs
- Hix.Data.ComponentConfig: [$sel:src:PackageConfig] :: PackageConfig -> Path Rel Dir
- Hix.Data.ComponentConfig: [$sel:unComponentName:ComponentName] :: ComponentName -> Text
- Hix.Data.ComponentConfig: [$sel:unModuleName:ModuleName] :: ModuleName -> Text
- Hix.Data.ComponentConfig: [$sel:unPackagePath:PackagePath] :: PackagePath -> Path Rel Dir
- Hix.Data.ComponentConfig: [$sel:unSourceDir:SourceDir] :: SourceDir -> Path Rel Dir
- Hix.Data.ComponentConfig: [$sel:unSourceDirs:SourceDirs] :: SourceDirs -> [SourceDir]
- Hix.Data.Dep: [$sel:package:Dep] :: Dep -> PackageName
- Hix.Data.Dep: [$sel:version:Dep] :: Dep -> VersionRange
- Hix.Data.EnvName: [$sel:unEnvName:EnvName] :: EnvName -> Text
- Hix.Data.GhciConfig: [$sel:args:GhciConfig] :: GhciConfig -> GhciArgs
- Hix.Data.GhciConfig: [$sel:defaultEnv:EnvConfig] :: EnvConfig -> EnvRunner
- Hix.Data.GhciConfig: [$sel:mainPackage:EnvConfig] :: EnvConfig -> Maybe PackageName
- Hix.Data.GhciConfig: [$sel:mainPackage:GhciConfig] :: GhciConfig -> Maybe PackageName
- Hix.Data.GhciConfig: [$sel:packages:EnvConfig] :: EnvConfig -> PackagesConfig
- Hix.Data.GhciConfig: [$sel:packages:GhciConfig] :: GhciConfig -> PackagesConfig
- Hix.Data.GhciConfig: [$sel:run:GhciConfig] :: GhciConfig -> Map RunnerName GhciRunExpr
- Hix.Data.GhciConfig: [$sel:setup:GhciConfig] :: GhciConfig -> Map RunnerName GhciSetupCode
- Hix.Data.GhciConfig: [$sel:unChangeDir:ChangeDir] :: ChangeDir -> Bool
- Hix.Data.GhciConfig: [$sel:unGhciArgs:GhciArgs] :: GhciArgs -> [Text]
- Hix.Data.GhciConfig: [$sel:unGhciRunExpr:GhciRunExpr] :: GhciRunExpr -> Text
- Hix.Data.GhciConfig: [$sel:unGhciSetupCode:GhciSetupCode] :: GhciSetupCode -> Text
- Hix.Data.GhciConfig: [$sel:unRunnerName:RunnerName] :: RunnerName -> Text
- Hix.Data.GhciTest: [$sel:args:GhciTest] :: GhciTest -> GhciArgs
- Hix.Data.GhciTest: [$sel:cmdline:GhciRun] :: GhciRun -> Text
- Hix.Data.GhciTest: [$sel:cmdline:GhcidRun] :: GhcidRun -> Text
- Hix.Data.GhciTest: [$sel:ghci:GhcidRun] :: GhcidRun -> GhciRun
- Hix.Data.GhciTest: [$sel:run:GhciRun] :: GhciRun -> Maybe Text
- Hix.Data.GhciTest: [$sel:script:GhciTest] :: GhciTest -> Text
- Hix.Data.GhciTest: [$sel:scriptFile:GhciRun] :: GhciRun -> Path Abs File
- Hix.Data.GhciTest: [$sel:searchPath:GhciTest] :: GhciTest -> [Path Abs Dir]
- Hix.Data.GhciTest: [$sel:shell:GhciRun] :: GhciRun -> Text
- Hix.Data.GhciTest: [$sel:test:GhciRun] :: GhciRun -> GhciTest
- Hix.Data.GhciTest: [$sel:test:GhciTest] :: GhciTest -> Maybe Text
- Hix.Data.GlobalOptions: [$sel:cwd:GlobalOptions] :: GlobalOptions -> Path Abs Dir
- Hix.Data.GlobalOptions: [$sel:debug:GlobalOptions] :: GlobalOptions -> Bool
- Hix.Data.GlobalOptions: [$sel:output:GlobalOptions] :: GlobalOptions -> OutputFormat
- Hix.Data.GlobalOptions: [$sel:quiet:GlobalOptions] :: GlobalOptions -> Bool
- Hix.Data.GlobalOptions: [$sel:target:GlobalOptions] :: GlobalOptions -> OutputTarget
- Hix.Data.GlobalOptions: [$sel:verbose:GlobalOptions] :: GlobalOptions -> Bool
- Hix.Data.Monad: [$sel:cwd:AppResources] :: AppResources -> Path Abs Dir
- Hix.Data.Monad: [$sel:debug:AppResources] :: AppResources -> Bool
- Hix.Data.Monad: [$sel:logger:AppResources] :: AppResources -> LogLevel -> Text -> M ()
- Hix.Data.Monad: [$sel:output:AppResources] :: AppResources -> OutputFormat
- Hix.Data.Monad: [$sel:quiet:AppResources] :: AppResources -> Bool
- Hix.Data.Monad: [$sel:target:AppResources] :: AppResources -> OutputTarget
- Hix.Data.Monad: [$sel:tmp:AppResources] :: AppResources -> Path Abs Dir
- Hix.Data.Monad: [$sel:verbose:AppResources] :: AppResources -> Bool
- Hix.Data.NewProjectConfig: [$sel:author:NewProjectConfig] :: NewProjectConfig -> Author
- Hix.Data.NewProjectConfig: [$sel:hixUrl:NewProjectConfig] :: NewProjectConfig -> HixUrl
- Hix.Data.NewProjectConfig: [$sel:name:NewProjectConfig] :: NewProjectConfig -> ProjectName
- Hix.Data.NewProjectConfig: [$sel:packages:NewProjectConfig] :: NewProjectConfig -> Bool
- Hix.Data.NewProjectConfig: [$sel:unAuthor:Author] :: Author -> Text
- Hix.Data.NewProjectConfig: [$sel:unHixUrl:HixUrl] :: HixUrl -> Text
- Hix.Data.NewProjectConfig: [$sel:unProjectName:ProjectName] :: ProjectName -> Text
- Hix.Data.NixExpr: [$sel:name:ExprAttr] :: ExprAttr -> Text
- Hix.Data.NixExpr: [$sel:value:ExprAttr] :: ExprAttr -> Expr
- Hix.Data.Options: [$sel:build:ProjectOptions] :: ProjectOptions -> BuildConfig
- Hix.Data.Options: [$sel:cabal:ManagedOptions] :: ManagedOptions -> CabalConfig
- Hix.Data.Options: [$sel:cd:TestOptions] :: TestOptions -> ChangeDir
- Hix.Data.Options: [$sel:cmd:Options] :: Options -> Command
- Hix.Data.Options: [$sel:common:BumpOptions] :: BumpOptions -> ManagedOptions
- Hix.Data.Options: [$sel:common:LowerOptions] :: LowerOptions -> ManagedOptions
- Hix.Data.Options: [$sel:component:ComponentCoords] :: ComponentCoords -> Maybe ComponentSpec
- Hix.Data.Options: [$sel:component:EnvRunnerOptions] :: EnvRunnerOptions -> Maybe TargetSpec
- Hix.Data.Options: [$sel:component:GhciOptions] :: GhciOptions -> TargetSpec
- Hix.Data.Options: [$sel:config:BootstrapOptions] :: BootstrapOptions -> BootstrapProjectConfig
- Hix.Data.Options: [$sel:config:EnvRunnerOptions] :: EnvRunnerOptions -> Either EnvConfig JsonConfig
- Hix.Data.Options: [$sel:config:GhciOptions] :: GhciOptions -> Either GhciConfig JsonConfig
- Hix.Data.Options: [$sel:config:NewOptions] :: NewOptions -> NewProjectConfig
- Hix.Data.Options: [$sel:config:PreprocOptions] :: PreprocOptions -> Maybe (Either PreprocConfig JsonConfig)
- Hix.Data.Options: [$sel:context:ManagedOptions] :: ManagedOptions -> Either ProjectContextProto JsonConfig
- Hix.Data.Options: [$sel:dir:ComponentSpec] :: ComponentSpec -> Maybe SourceDir
- Hix.Data.Options: [$sel:dir:PackageSpec] :: PackageSpec -> Maybe (SomeBase Dir)
- Hix.Data.Options: [$sel:envs:ProjectOptions] :: ProjectOptions -> [EnvName]
- Hix.Data.Options: [$sel:extra:GhciOptions] :: GhciOptions -> Maybe ExtraGhciOptions
- Hix.Data.Options: [$sel:extra:GhcidOptions] :: GhcidOptions -> Maybe ExtraGhcidOptions
- Hix.Data.Options: [$sel:extraGhci:EnvRunnerCommandOptions] :: EnvRunnerCommandOptions -> Maybe ExtraGhciOptions
- Hix.Data.Options: [$sel:extraGhcid:EnvRunnerCommandOptions] :: EnvRunnerCommandOptions -> Maybe ExtraGhcidOptions
- Hix.Data.Options: [$sel:ghci:GhcidOptions] :: GhcidOptions -> GhciOptions
- Hix.Data.Options: [$sel:global:Options] :: Options -> GlobalOptions
- Hix.Data.Options: [$sel:handlers:ManagedOptions] :: ManagedOptions -> Maybe SpecialBuildHandlers
- Hix.Data.Options: [$sel:inFile:PreprocOptions] :: PreprocOptions -> Path Abs File
- Hix.Data.Options: [$sel:initOnly:LowerOptions] :: LowerOptions -> Bool
- Hix.Data.Options: [$sel:mergeBounds:ProjectOptions] :: ProjectOptions -> Bool
- Hix.Data.Options: [$sel:mod:TestOptions] :: TestOptions -> ModuleName
- Hix.Data.Options: [$sel:name:ComponentSpec] :: ComponentSpec -> ComponentName
- Hix.Data.Options: [$sel:name:PackageSpec] :: PackageSpec -> PackageName
- Hix.Data.Options: [$sel:options:EnvRunnerCommandOptions] :: EnvRunnerCommandOptions -> EnvRunnerOptions
- Hix.Data.Options: [$sel:outFile:PreprocOptions] :: PreprocOptions -> Path Abs File
- Hix.Data.Options: [$sel:package:ComponentCoords] :: ComponentCoords -> Maybe PackageSpec
- Hix.Data.Options: [$sel:project:ManagedOptions] :: ManagedOptions -> ProjectOptions
- Hix.Data.Options: [$sel:query:ProjectOptions] :: ProjectOptions -> RawQuery
- Hix.Data.Options: [$sel:readUpperBounds:ProjectOptions] :: ProjectOptions -> Bool
- Hix.Data.Options: [$sel:reset:LowerOptions] :: LowerOptions -> Bool
- Hix.Data.Options: [$sel:root:EnvRunnerOptions] :: EnvRunnerOptions -> Maybe (Path Abs Dir)
- Hix.Data.Options: [$sel:root:GhciOptions] :: GhciOptions -> Maybe (Path Abs Dir)
- Hix.Data.Options: [$sel:root:PreprocOptions] :: PreprocOptions -> Maybe (Path Abs Dir)
- Hix.Data.Options: [$sel:runner:TestOptions] :: TestOptions -> Maybe RunnerName
- Hix.Data.Options: [$sel:source:PreprocOptions] :: PreprocOptions -> Path Abs File
- Hix.Data.Options: [$sel:stabilize:LowerOptions] :: LowerOptions -> Bool
- Hix.Data.Options: [$sel:stateFile:ManagedOptions] :: ManagedOptions -> StateFileConfig
- Hix.Data.Options: [$sel:test:EnvRunnerCommandOptions] :: EnvRunnerCommandOptions -> TestOptions
- Hix.Data.Options: [$sel:test:GhciOptions] :: GhciOptions -> TestOptions
- Hix.Data.Options: [$sel:test:TestOptions] :: TestOptions -> Maybe Text
- Hix.Data.Overrides: [$sel:hash:Override] :: Override -> SourceHash
- Hix.Data.Overrides: [$sel:version:Override] :: Override -> Version
- Hix.Data.PackageId: [$sel:name:PackageId] :: PackageId -> PackageName
- Hix.Data.PackageId: [$sel:version:PackageId] :: PackageId -> Version
- Hix.Data.PreprocConfig: [$sel:packages:PreprocConfig] :: PreprocConfig -> PackagesConfig
- Hix.Data.ProjectFile: [$sel:content:ProjectFile] :: ProjectFile -> Text
- Hix.Data.ProjectFile: [$sel:path:ProjectFile] :: ProjectFile -> Path Rel File
- Hix.Data.Version: [$sel:prefix:Major] :: Major -> Version
- Hix.Data.Version: [$sel:versions:Major] :: Major -> NonEmpty Version
- Hix.Data.VersionBounds: [$sel:lower:VersionBounds] :: VersionBounds -> Maybe Version
- Hix.Data.VersionBounds: [$sel:upper:VersionBounds] :: VersionBounds -> Maybe Version
- Hix.Error: BootstrapError :: Text -> Error
- Hix.Error: Client :: Text -> Error
- Hix.Error: EnvError :: Text -> Error
- Hix.Error: Fatal :: Text -> Error
- Hix.Error: GhciError :: Text -> Error
- Hix.Error: NewError :: Text -> Error
- Hix.Error: NoMatch :: Text -> Error
- Hix.Error: PreprocError :: Text -> Error
- Hix.Error: data Error
- Hix.Hackage: [$sel:versions:HackageVersions] :: HackageVersions -> [String]
- Hix.Managed.Cabal.Changes: [$sel:changes:SolverPlan] :: SolverPlan -> [PackageId]
- Hix.Managed.Cabal.Changes: [$sel:matching:SolverPlan] :: SolverPlan -> [PackageId]
- Hix.Managed.Cabal.Changes: [$sel:nonReinstallable:SolverPlan] :: SolverPlan -> Maybe (NonEmpty PackageId)
- Hix.Managed.Cabal.Changes: [$sel:overrides:SolverChanges] :: SolverChanges -> [PackageId]
- Hix.Managed.Cabal.Changes: [$sel:projectDeps:SolverChanges] :: SolverChanges -> Versions
- Hix.Managed.Cabal.Changes: [$sel:versions:SolverChanges] :: SolverChanges -> Versions
- Hix.Managed.Cabal.Data.Config: [$sel:allowBoot:SolveConfig] :: SolveConfig -> Bool
- Hix.Managed.Cabal.Data.Config: [$sel:cabal:SolveConfig] :: SolveConfig -> CabalConfig
- Hix.Managed.Cabal.Data.Config: [$sel:ghc:SolveConfig] :: SolveConfig -> Maybe GhcPath
- Hix.Managed.Cabal.Data.Config: [$sel:hackageRepoName:SolveConfig] :: SolveConfig -> HackageRepoName
- Hix.Managed.Cabal.Data.Config: [$sel:indexState:CabalConfig] :: CabalConfig -> Maybe HackageIndexState
- Hix.Managed.Cabal.Data.Config: [$sel:verbosity:SolveConfig] :: SolveConfig -> Verbosity
- Hix.Managed.Cabal.Data.Packages: [$sel:available:GhcPackages] :: GhcPackages -> SourcePackages
- Hix.Managed.Cabal.Data.Packages: [$sel:installed:GhcPackages] :: GhcPackages -> InstalledPackages
- Hix.Managed.Cabal.Data.SolveResources: [$sel:compiler:SolveResources] :: SolveResources -> CompilerInfo
- Hix.Managed.Cabal.Data.SolveResources: [$sel:conf:SolveResources] :: SolveResources -> SolveConfig
- Hix.Managed.Cabal.Data.SolveResources: [$sel:flags:SolveResources] :: SolveResources -> SolveFlags
- Hix.Managed.Cabal.Data.SolveResources: [$sel:installedPkgIndex:SolveResources] :: SolveResources -> InstalledPackageIndex
- Hix.Managed.Cabal.Data.SolveResources: [$sel:pkgConfigDb:SolveResources] :: SolveResources -> PkgConfigDb
- Hix.Managed.Cabal.Data.SolveResources: [$sel:platform:SolveResources] :: SolveResources -> Platform
- Hix.Managed.Cabal.Data.SolveResources: [$sel:solverParams:SolveResources] :: SolveResources -> DepResolverParams -> DepResolverParams
- Hix.Managed.Cabal.Data.SolveResources: [$sel:sourcePkgDb:SolveResources] :: SolveResources -> SourcePackageDb
- Hix.Managed.Cabal.Data.SolveTarget: [$sel:dep:SolveTarget] :: SolveTarget -> PackageSpecifier UnresolvedSourcePackage
- Hix.Managed.Cabal.Data.SolveTarget: [$sel:prefs:SolveTarget] :: SolveTarget -> [PackagePreference]
- Hix.Managed.Cabal.Data.SolverState: [$sel:allowNewer:SolverFlags] :: SolverFlags -> Bool
- Hix.Managed.Cabal.Data.SourcePackage: SourcePackageDeps :: Map Version [Dep] -> SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance Distribution.Pretty.Pretty Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Base.Monoid Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Base.Semigroup Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Classes.Eq Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Generics.Generic Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.IsList.IsList Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Show.Show Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps
- Hix.Managed.Cabal.Data.SourcePackage: instance Hix.Class.Map.NMap Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps Distribution.Types.Version.Version [Hix.Data.Dep.Dep] Hix.Class.Map.LookupMonoid
- Hix.Managed.Cabal.Data.SourcePackage: instance Hix.Class.Map.NMap Hix.Managed.Cabal.Data.SourcePackage.SourcePackages Hix.Data.PackageName.PackageName Hix.Managed.Cabal.Data.SourcePackage.SourcePackageDeps Hix.Class.Map.LookupMaybe
- Hix.Managed.Cabal.Data.SourcePackage: newtype SourcePackageDeps
- Hix.Managed.Cabal.Init: [$sel:global:SolveFlags] :: SolveFlags -> GlobalFlags
- Hix.Managed.Cabal.Init: [$sel:main:SolveFlags] :: SolveFlags -> NixStyleFlags ()
- Hix.Managed.Data.BuildConfig: [$sel:buildOutput:BuildConfig] :: BuildConfig -> Bool
- Hix.Managed.Data.BuildConfig: [$sel:lookup:BuildConfig] :: BuildConfig -> Bool
- Hix.Managed.Data.BuildConfig: [$sel:maxFailedPost:BuildConfig] :: BuildConfig -> Natural
- Hix.Managed.Data.BuildConfig: [$sel:maxFailedPre:BuildConfig] :: BuildConfig -> Natural
- Hix.Managed.Data.BuildConfig: [$sel:maxIterations:BuildConfig] :: BuildConfig -> Natural
- Hix.Managed.Data.BuildConfig: [$sel:timeout:BuildConfig] :: BuildConfig -> Maybe BuildTimeout
- Hix.Managed.Data.BuildConfig: [$sel:toposortMutations:BuildConfig] :: BuildConfig -> Bool
- Hix.Managed.Data.BuildConfig: [$sel:validate:BuildConfig] :: BuildConfig -> Bool
- Hix.Managed.Data.BuildOutput: [$sel:failed:BuildOutput] :: BuildOutput -> [MutableDep]
- Hix.Managed.Data.BuildOutput: [$sel:failedNames:BuildOutput] :: BuildOutput -> Maybe Text
- Hix.Managed.Data.BuildOutput: [$sel:modified:BuildOutput] :: BuildOutput -> [ModifiedId]
- Hix.Managed.Data.BuildOutput: [$sel:modifiedNames:BuildOutput] :: BuildOutput -> Maybe Text
- Hix.Managed.Data.BuildOutput: [$sel:package:ModifiedId] :: ModifiedId -> MutableDep
- Hix.Managed.Data.BuildOutput: [$sel:range:ModifiedId] :: ModifiedId -> Maybe VersionBounds
- Hix.Managed.Data.BuildOutput: [$sel:unmodified:BuildOutput] :: BuildOutput -> [MutableDep]
- Hix.Managed.Data.BuildOutput: [$sel:unmodifiedNames:BuildOutput] :: BuildOutput -> Maybe Text
- Hix.Managed.Data.BuildOutput: [$sel:version:ModifiedId] :: ModifiedId -> Version
- Hix.Managed.Data.Bump: [$sel:bound:Bump] :: Bump -> Version
- Hix.Managed.Data.Bump: [$sel:changed:Bump] :: Bump -> Bool
- Hix.Managed.Data.Bump: [$sel:version:Bump] :: Bump -> Version
- Hix.Managed.Data.Constraints: [$sel:force:MutationConstraints] :: MutationConstraints -> Maybe VersionRange
- Hix.Managed.Data.Constraints: [$sel:installed:MutationConstraints] :: MutationConstraints -> Maybe Bool
- Hix.Managed.Data.Constraints: [$sel:mutation:MutationConstraints] :: MutationConstraints -> VersionBounds
- Hix.Managed.Data.Constraints: [$sel:oldest:MutationConstraints] :: MutationConstraints -> Maybe Bool
- Hix.Managed.Data.Constraints: [$sel:prefer:MutationConstraints] :: MutationConstraints -> Maybe VersionRange
- Hix.Managed.Data.CurrentBuild: [$sel:target:CurrentBuild] :: CurrentBuild -> LocalPackage
- Hix.Managed.Data.Diff: [$sel:detail:DiffAdded] :: Diff d a -> d
- Hix.Managed.Data.Diff: [$sel:new:DiffAdded] :: Diff d a -> a
- Hix.Managed.Data.Diff: [$sel:original:DiffAdded] :: Diff d a -> a
- Hix.Managed.Data.EnvConfig: [$sel:ghc:EnvConfig] :: EnvConfig -> GhcDb
- Hix.Managed.Data.EnvConfig: [$sel:targets:EnvConfig] :: EnvConfig -> [LocalPackage]
- Hix.Managed.Data.EnvContext: [$sel:deps:EnvContext] :: EnvContext -> EnvDeps
- Hix.Managed.Data.EnvContext: [$sel:env:EnvContext] :: EnvContext -> EnvName
- Hix.Managed.Data.EnvContext: [$sel:ghc:EnvContext] :: EnvContext -> GhcDb
- Hix.Managed.Data.EnvContext: [$sel:local:EnvDeps] :: EnvDeps -> Set LocalPackage
- Hix.Managed.Data.EnvContext: [$sel:mutable:EnvDeps] :: EnvDeps -> Set MutableDep
- Hix.Managed.Data.EnvContext: [$sel:query:EnvContext] :: EnvContext -> NonEmpty MutableDep
- Hix.Managed.Data.EnvContext: [$sel:solverBounds:EnvContext] :: EnvContext -> Ranges
- Hix.Managed.Data.EnvContext: [$sel:targets:EnvContext] :: EnvContext -> Targets
- Hix.Managed.Data.EnvRequest: [$sel:builder:EnvRequest] :: EnvRequest -> EnvBuilder
- Hix.Managed.Data.EnvRequest: [$sel:context:EnvRequest] :: EnvRequest -> EnvContext
- Hix.Managed.Data.EnvRequest: [$sel:state:EnvRequest] :: EnvRequest -> Initial EnvState
- Hix.Managed.Data.EnvResult: [$sel:env:EnvResult] :: EnvResult -> EnvName
- Hix.Managed.Data.EnvResult: [$sel:state:EnvResult] :: EnvResult -> Maybe EnvState
- Hix.Managed.Data.EnvResult: [$sel:summaries:EnvResult] :: EnvResult -> NonEmpty StageSummary
- Hix.Managed.Data.EnvState: [$sel:bounds:EnvState] :: EnvState -> MutableDeps BoundsChange
- Hix.Managed.Data.EnvState: [$sel:initial:EnvState] :: EnvState -> MutableDeps VersionChange
- Hix.Managed.Data.EnvState: [$sel:overrides:EnvState] :: EnvState -> Overrides
- Hix.Managed.Data.EnvState: [$sel:versions:EnvState] :: EnvState -> MutableDeps VersionChange
- Hix.Managed.Data.Lower: [$sel:majors:Lower] :: Lower -> NonEmpty Major
- Hix.Managed.Data.LowerConfig: [$sel:initOnly:LowerConfig] :: LowerConfig -> Bool
- Hix.Managed.Data.LowerConfig: [$sel:reset:LowerConfig] :: LowerConfig -> Bool
- Hix.Managed.Data.LowerConfig: [$sel:stabilize:LowerConfig] :: LowerConfig -> Bool
- Hix.Managed.Data.ManagedPackage: [$sel:local:ManagedPackage] :: ManagedPackage -> LocalRanges
- Hix.Managed.Data.ManagedPackage: [$sel:mutable:ManagedPackage] :: ManagedPackage -> MutableRanges
- Hix.Managed.Data.ManagedPackage: [$sel:package:ManagedPackage] :: ManagedPackage -> LocalPackage
- Hix.Managed.Data.ManagedPackage: [$sel:version:ManagedPackage] :: ManagedPackage -> Version
- Hix.Managed.Data.ManagedPackageProto: [$sel:deps:ManagedPackageProto] :: ManagedPackageProto -> [Dep]
- Hix.Managed.Data.ManagedPackageProto: [$sel:name:ManagedPackageProto] :: ManagedPackageProto -> LocalPackage
- Hix.Managed.Data.ManagedPackageProto: [$sel:version:ManagedPackageProto] :: ManagedPackageProto -> Version
- Hix.Managed.Data.MutableId: [$sel:name:MutableId] :: MutableId -> MutableDep
- Hix.Managed.Data.MutableId: [$sel:version:MutableId] :: MutableId -> Version
- Hix.Managed.Data.Mutation: [$sel:candidate:MutationSuccess] :: MutationResult s -> MutableId
- Hix.Managed.Data.Mutation: [$sel:changed:MutationSuccess] :: MutationResult s -> Bool
- Hix.Managed.Data.Mutation: [$sel:description:BuildMutation] :: BuildMutation -> Text
- Hix.Managed.Data.Mutation: [$sel:ext:MutationSuccess] :: MutationResult s -> s
- Hix.Managed.Data.Mutation: [$sel:mutation:DepMutation] :: DepMutation a -> a
- Hix.Managed.Data.Mutation: [$sel:mutation:FailedMutation] :: FailedMutation -> Text
- Hix.Managed.Data.Mutation: [$sel:package:DepMutation] :: DepMutation a -> MutableDep
- Hix.Managed.Data.Mutation: [$sel:package:FailedMutation] :: FailedMutation -> MutableDep
- Hix.Managed.Data.Mutation: [$sel:retract:DepMutation] :: DepMutation a -> Bool
- Hix.Managed.Data.Mutation: [$sel:solverState:BuildMutation] :: BuildMutation -> SolverState
- Hix.Managed.Data.Mutation: [$sel:state:MutationSuccess] :: MutationResult s -> MutationState
- Hix.Managed.Data.Mutation: [$sel:updateBound:BuildMutation] :: BuildMutation -> Version -> VersionBounds -> VersionBounds
- Hix.Managed.Data.MutationMode: [$sel:foo:MutationMode] :: MutationMode -> Int
- Hix.Managed.Data.MutationState: [$sel:bounds:MutationState] :: MutationState -> MutableBounds
- Hix.Managed.Data.MutationState: [$sel:initial:MutationState] :: MutationState -> MutableVersions
- Hix.Managed.Data.MutationState: [$sel:overrides:MutationState] :: MutationState -> Overrides
- Hix.Managed.Data.MutationState: [$sel:versions:MutationState] :: MutationState -> MutableVersions
- Hix.Managed.Data.ProcessState: [$sel:packages:ProcessState] :: ProcessState -> Packages ManagedPackage
- Hix.Managed.Data.ProcessState: [$sel:state:ProcessState] :: ProcessState -> ProjectState
- Hix.Managed.Data.ProjectContext: [$sel:build:ProjectContext] :: ProjectContext -> BuildConfig
- Hix.Managed.Data.ProjectContext: [$sel:envs:ProjectContext] :: ProjectContext -> NonEmpty (Either EnvName EnvContext)
- Hix.Managed.Data.ProjectContext: [$sel:packages:ProjectContext] :: ProjectContext -> Packages ManagedPackage
- Hix.Managed.Data.ProjectContext: [$sel:state:ProjectContext] :: ProjectContext -> ProjectState
- Hix.Managed.Data.ProjectContextProto: [$sel:buildOutputsPrefix:ProjectContextProto] :: ProjectContextProto -> Maybe BuildOutputsPrefix
- Hix.Managed.Data.ProjectContextProto: [$sel:envs:ProjectContextProto] :: ProjectContextProto -> Envs EnvConfig
- Hix.Managed.Data.ProjectContextProto: [$sel:packages:ProjectContextProto] :: ProjectContextProto -> Packages ManagedPackageProto
- Hix.Managed.Data.ProjectContextProto: [$sel:state:ProjectContextProto] :: ProjectContextProto -> ProjectStateProto
- Hix.Managed.Data.ProjectResult: [$sel:envs:ProjectResult] :: ProjectResult -> NonEmpty EnvResult
- Hix.Managed.Data.ProjectResult: [$sel:state:ProjectResult] :: ProjectResult -> ProjectState
- Hix.Managed.Data.ProjectState: [$sel:bounds:ProjectState] :: ProjectState -> Packages MutableBounds
- Hix.Managed.Data.ProjectState: [$sel:initial:ProjectState] :: ProjectState -> Envs MutableVersions
- Hix.Managed.Data.ProjectState: [$sel:overrides:ProjectState] :: ProjectState -> Envs Overrides
- Hix.Managed.Data.ProjectState: [$sel:resolving:ProjectState] :: ProjectState -> Bool
- Hix.Managed.Data.ProjectState: [$sel:versions:ProjectState] :: ProjectState -> Envs MutableVersions
- Hix.Managed.Data.ProjectStateProto: [$sel:bounds:ProjectStateProto] :: ProjectStateProto -> Packages Bounds
- Hix.Managed.Data.ProjectStateProto: [$sel:initial:ProjectStateProto] :: ProjectStateProto -> Envs Versions
- Hix.Managed.Data.ProjectStateProto: [$sel:overrides:ProjectStateProto] :: ProjectStateProto -> Envs Overrides
- Hix.Managed.Data.ProjectStateProto: [$sel:resolving:ProjectStateProto] :: ProjectStateProto -> Bool
- Hix.Managed.Data.ProjectStateProto: [$sel:versions:ProjectStateProto] :: ProjectStateProto -> Envs Versions
- Hix.Managed.Data.QueryDep: [$sel:bounds:QueryDep] :: QueryDep -> VersionBounds
- Hix.Managed.Data.QueryDep: [$sel:current:QueryDep] :: QueryDep -> Maybe Version
- Hix.Managed.Data.QueryDep: [$sel:installed:QueryDep] :: QueryDep -> Maybe Version
- Hix.Managed.Data.QueryDep: [$sel:override:QueryDep] :: QueryDep -> Maybe Version
- Hix.Managed.Data.QueryDep: [$sel:package:QueryDep] :: QueryDep -> MutableDep
- Hix.Managed.Data.StageContext: [$sel:builder:StageContext] :: StageContext -> EnvBuilder
- Hix.Managed.Data.StageContext: [$sel:env:StageContext] :: StageContext -> EnvContext
- Hix.Managed.Data.StageContext: [$sel:initial:StageContext] :: StageContext -> MutableVersions
- Hix.Managed.Data.StageContext: [$sel:query:StageContext] :: StageContext -> Query
- Hix.Managed.Data.StageContext: [$sel:state:StageContext] :: StageContext -> Initial MutationState
- Hix.Managed.Data.StageResult: [$sel:state:StageResult] :: StageResult -> Maybe MutationState
- Hix.Managed.Data.StageResult: [$sel:summary:StageResult] :: StageResult -> StageSummary
- Hix.Managed.Data.StageState: Finished :: BuildStatus -> BuildResult
- Hix.Managed.Data.StageState: TimedOut :: BuildResult
- Hix.Managed.Data.StageState: [$sel:ext:StageState] :: StageState a s -> s
- Hix.Managed.Data.StageState: [$sel:failed:StageState] :: StageState a s -> [DepMutation a]
- Hix.Managed.Data.StageState: [$sel:iterations:StageState] :: StageState a s -> Natural
- Hix.Managed.Data.StageState: [$sel:state:StageState] :: StageState a s -> MutationState
- Hix.Managed.Data.StageState: [$sel:success:StageState] :: StageState a s -> Map MutableDep BuildSuccess
- Hix.Managed.Data.StateFileConfig: [$sel:file:StateFileConfig] :: StateFileConfig -> Path Rel File
- Hix.Managed.Data.StateFileConfig: [$sel:projectRoot:StateFileConfig] :: StateFileConfig -> Maybe (Path Abs Dir)
- Hix.Managed.EnvResult: [$sel:added:DepResults] :: DepResults -> [DepResult]
- Hix.Managed.EnvResult: [$sel:bounds:DepResult] :: DepResult -> VersionBounds
- Hix.Managed.EnvResult: [$sel:detail:DepResult] :: DepResult -> DepResultDetail
- Hix.Managed.EnvResult: [$sel:package:DepResult] :: DepResult -> MutableDep
- Hix.Managed.EnvResult: [$sel:unmodified:DepResults] :: DepResults -> [DepResult]
- Hix.Managed.EnvResult: [$sel:updated:DepResults] :: DepResults -> [DepResult]
- Hix.Managed.EnvResult: [$sel:version:DepResult] :: DepResult -> Version
- Hix.Managed.Handlers.Build: [$sel:buildWithState:EnvBuilder] :: EnvBuilder -> Versions -> [PackageId] -> M (Overrides, BuildResult)
- Hix.Managed.Handlers.Build: [$sel:cabal:BuildHandlers] :: BuildHandlers -> Packages ManagedPackage -> GhcDb -> M CabalHandlers
- Hix.Managed.Handlers.Build: [$sel:cabal:EnvBuilder] :: EnvBuilder -> CabalHandlers
- Hix.Managed.Handlers.Build: [$sel:latestVersion:BuildHandlers] :: BuildHandlers -> PackageName -> M (Maybe Version)
- Hix.Managed.Handlers.Build: [$sel:report:BuildHandlers] :: BuildHandlers -> ReportHandlers
- Hix.Managed.Handlers.Build: [$sel:stateFile:BuildHandlers] :: BuildHandlers -> StateFileHandlers
- Hix.Managed.Handlers.Build: [$sel:versions:BuildHandlers] :: BuildHandlers -> PackageName -> M [Version]
- Hix.Managed.Handlers.Build: [$sel:withBuilder:BuildHandlers] :: BuildHandlers -> forall a. (Builder -> M a) -> M a
- Hix.Managed.Handlers.Build: [$sel:withEnvBuilder:Builder] :: Builder -> forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a
- Hix.Managed.Handlers.Build.Prod: [$sel:buildOutputsPrefix:BuilderResources] :: BuilderResources -> Maybe BuildOutputsPrefix
- Hix.Managed.Handlers.Build.Prod: [$sel:buildTimeout:BuilderResources] :: BuilderResources -> Maybe BuildTimeout
- Hix.Managed.Handlers.Build.Prod: [$sel:context:EnvBuilderResources] :: EnvBuilderResources -> EnvContext
- Hix.Managed.Handlers.Build.Prod: [$sel:envsConf:BuilderResources] :: BuilderResources -> Envs EnvConfig
- Hix.Managed.Handlers.Build.Prod: [$sel:global:EnvBuilderResources] :: EnvBuilderResources -> BuilderResources
- Hix.Managed.Handlers.Build.Prod: [$sel:hackage:BuilderResources] :: BuilderResources -> HackageHandlers
- Hix.Managed.Handlers.Build.Prod: [$sel:root:BuilderResources] :: BuilderResources -> Path Abs Dir
- Hix.Managed.Handlers.Build.Prod: [$sel:stateFileHandlers:BuilderResources] :: BuilderResources -> StateFileHandlers
- Hix.Managed.Handlers.Build.Prod: buildPackage :: Maybe BuildTimeout -> Path Abs Dir -> EnvName -> LocalPackage -> M BuildResult
- Hix.Managed.Handlers.Cabal: [$sel:installedVersion:CabalHandlers] :: CabalHandlers -> PackageName -> Maybe Version
- Hix.Managed.Handlers.Cabal: [$sel:solveForVersion:CabalHandlers] :: CabalHandlers -> SolverState -> M (Maybe SolverPlan)
- Hix.Managed.Handlers.Cabal: [$sel:sortMutations:CabalHandlers] :: CabalHandlers -> forall a. [DepMutation a] -> M [DepMutation a]
- Hix.Managed.Handlers.Hackage: [$sel:fetchHash:HackageHandlers] :: HackageHandlers -> PackageId -> M SourceHash
- Hix.Managed.Handlers.Mutation: [$sel:process:MutationHandlers] :: MutationHandlers a s -> s -> DepMutation a -> (BuildMutation -> M (Maybe MutationState)) -> M (MutationResult s)
- Hix.Managed.Handlers.Report: [$sel:mutations:ReportHandlers] :: ReportHandlers -> ProjectResult -> M ()
- Hix.Managed.Handlers.StateFile: [$sel:writeFile:StateFileHandlers] :: StateFileHandlers -> Maybe (Path Abs Dir) -> Expr -> M ()
- Hix.Managed.Lower.Data.LowerMode: [$sel:firstSuccess:LowerMode] :: LowerMode -> Bool
- Hix.Managed.Lower.Data.LowerMode: [$sel:noSuccess:LowerMode] :: LowerMode -> MutationResult SolverState
- Hix.Monad: [$sel:cwd:AppResources] :: AppResources -> Path Abs Dir
- Hix.Monad: [$sel:debug:AppResources] :: AppResources -> Bool
- Hix.Monad: [$sel:logger:AppResources] :: AppResources -> LogLevel -> Text -> M ()
- Hix.Monad: [$sel:output:AppResources] :: AppResources -> OutputFormat
- Hix.Monad: [$sel:quiet:AppResources] :: AppResources -> Bool
- Hix.Monad: [$sel:target:AppResources] :: AppResources -> OutputTarget
- Hix.Monad: [$sel:tmp:AppResources] :: AppResources -> Path Abs Dir
- Hix.Monad: [$sel:verbose:AppResources] :: AppResources -> Bool
- Hix.Optparse: [$sel:unJsonConfig:JsonConfig] :: JsonConfig -> IO (Either String Value)
- Hix.OutputWriter: [$sel:bytes:OutputWriter] :: OutputWriter -> ByteString -> M ()
- Hix.OutputWriter: [$sel:file:WriteError] :: WriteError -> Path Abs File
- Hix.OutputWriter: [$sel:msg:WriteError] :: WriteError -> Text
- Hix.OutputWriter: [$sel:text:OutputWriter] :: OutputWriter -> Text -> M ()
- Hix.OutputWriter: [$sel:textAppend:OutputWriter] :: OutputWriter -> Text -> M ()
- Hix.Prelude: [$sel:local:Prelude] :: Prelude -> Bool
- Hix.Prelude: [$sel:preludeModule:Prelude] :: Prelude -> String
- Hix.Prelude: [$sel:preludePackage:Prelude] :: Prelude -> String
- Hix.Preproc: [$sel:exportsSelf:Header] :: Header -> Bool
- Hix.Preproc: [$sel:exportsSelf:ScanState] :: ScanState -> Bool
- Hix.Preproc: [$sel:extensions:CabalConfig] :: CabalConfig -> [Builder]
- Hix.Preproc: [$sel:ghcOptions:CabalConfig] :: CabalConfig -> [Builder]
- Hix.Preproc: [$sel:importLines:Header] :: Header -> [ByteString]
- Hix.Preproc: [$sel:importLines:ScanState] :: ScanState -> [ByteString]
- Hix.Preproc: [$sel:importsEndLine:Header] :: Header -> Int
- Hix.Preproc: [$sel:importsLength:ScanState] :: ScanState -> Int
- Hix.Preproc: [$sel:moduleEndLine:Header] :: Header -> Int
- Hix.Preproc: [$sel:moduleLength:ScanState] :: ScanState -> Int
- Hix.Preproc: [$sel:moduleLines:Header] :: Header -> [ByteString]
- Hix.Preproc: [$sel:moduleLines:ScanState] :: ScanState -> [ByteString]
- Hix.Preproc: [$sel:moduleName:ScanState] :: ScanState -> Maybe ByteString
- Hix.Preproc: [$sel:phase:ScanState] :: ScanState -> Phase
- Hix.Preproc: [$sel:prelude:CabalConfig] :: CabalConfig -> Maybe Prelude
- Hix.Preproc: [$sel:prelude:Header] :: Header -> CustomPrelude
- Hix.Preproc: [$sel:prelude:ScanState] :: ScanState -> CustomPrelude
- Hix.Preproc: [$sel:rest:Header] :: Header -> Builder
- Hix.Preproc: [$sel:unDummyExportName:DummyExportName] :: DummyExportName -> ByteString
+ Hix.Bootstrap: [components] :: HixPackage -> [HixComponent]
+ Hix.Bootstrap: [dep] :: PreludeWithVersion -> Maybe Dependency
+ Hix.Bootstrap: [description] :: HixPackage -> ExprAttr
+ Hix.Bootstrap: [info] :: CabalInfo -> GenericPackageDescription
+ Hix.Bootstrap: [known] :: HixPackage -> [ExprAttr]
+ Hix.Bootstrap: [meta] :: HixPackage -> [ExprAttr]
+ Hix.Bootstrap: [name] :: HixPackage -> PackageName
+ Hix.Bootstrap: [path] :: CabalInfo -> Path Rel Dir
+ Hix.Bootstrap: [prelude] :: HixComponent -> Maybe PreludeWithVersion
+ Hix.Bootstrap: [special] :: HixComponent -> ComponentType
+ Hix.Bootstrap: [src] :: HixPackage -> Path Rel Dir
+ Hix.Class.EncodeNix: ($dmencodeNix) :: (EncodeNix a, EncodeProd a) => a -> Expr
+ Hix.Class.Map: nMember :: NMap map k v sort => k -> map -> Bool
+ Hix.Class.SOP: [name] :: FieldK -> Symbol
+ Hix.Class.SOP: [tpe] :: FieldK -> Type
+ Hix.Console: [black] :: ColorOffsets -> Int
+ Hix.Console: [blue] :: ColorOffsets -> Int
+ Hix.Console: [cyan] :: ColorOffsets -> Int
+ Hix.Console: [green] :: ColorOffsets -> Int
+ Hix.Console: [magenta] :: ColorOffsets -> Int
+ Hix.Console: [red] :: ColorOffsets -> Int
+ Hix.Console: [white] :: ColorOffsets -> Int
+ Hix.Console: [yellow] :: ColorOffsets -> Int
+ Hix.Data.BootstrapProjectConfig: [hixUrl] :: BootstrapProjectConfig -> HixUrl
+ Hix.Data.ComponentConfig: [component] :: Target -> ComponentConfig
+ Hix.Data.ComponentConfig: [components] :: PackageConfig -> Map ComponentName ComponentConfig
+ Hix.Data.ComponentConfig: [extensions] :: ComponentConfig -> [String]
+ Hix.Data.ComponentConfig: [ghcOptions] :: ComponentConfig -> [String]
+ Hix.Data.ComponentConfig: [language] :: ComponentConfig -> String
+ Hix.Data.ComponentConfig: [module_] :: PreludeConfig -> ModuleName
+ Hix.Data.ComponentConfig: [name] :: PackageConfig -> PackageName
+ Hix.Data.ComponentConfig: [package] :: Target -> PackageConfig
+ Hix.Data.ComponentConfig: [prelude] :: ComponentConfig -> Maybe PreludeConfig
+ Hix.Data.ComponentConfig: [runner] :: ComponentConfig -> Maybe EnvRunner
+ Hix.Data.ComponentConfig: [sourceDir] :: Target -> Maybe SourceDir
+ Hix.Data.ComponentConfig: [sourceDirs] :: ComponentConfig -> SourceDirs
+ Hix.Data.ComponentConfig: [src] :: PackageConfig -> Path Rel Dir
+ Hix.Data.ComponentConfig: [unComponentName] :: ComponentName -> Text
+ Hix.Data.ComponentConfig: [unModuleName] :: ModuleName -> Text
+ Hix.Data.ComponentConfig: [unPackagePath] :: PackagePath -> Path Rel Dir
+ Hix.Data.ComponentConfig: [unSourceDir] :: SourceDir -> Path Rel Dir
+ Hix.Data.ComponentConfig: [unSourceDirs] :: SourceDirs -> [SourceDir]
+ Hix.Data.Dep: [package] :: Dep -> PackageName
+ Hix.Data.Dep: [version] :: Dep -> VersionRange
+ Hix.Data.EnvName: [unEnvName] :: EnvName -> Text
+ Hix.Data.GhciConfig: [args] :: GhciConfig -> GhciArgs
+ Hix.Data.GhciConfig: [defaultEnv] :: EnvConfig -> EnvRunner
+ Hix.Data.GhciConfig: [mainPackage] :: GhciConfig -> Maybe PackageName
+ Hix.Data.GhciConfig: [packages] :: GhciConfig -> PackagesConfig
+ Hix.Data.GhciConfig: [run] :: GhciConfig -> Map RunnerName GhciRunExpr
+ Hix.Data.GhciConfig: [setup] :: GhciConfig -> Map RunnerName GhciSetupCode
+ Hix.Data.GhciConfig: [unChangeDir] :: ChangeDir -> Bool
+ Hix.Data.GhciConfig: [unGhciArgs] :: GhciArgs -> [Text]
+ Hix.Data.GhciConfig: [unGhciRunExpr] :: GhciRunExpr -> Text
+ Hix.Data.GhciConfig: [unGhciSetupCode] :: GhciSetupCode -> Text
+ Hix.Data.GhciConfig: [unRunnerName] :: RunnerName -> Text
+ Hix.Data.GhciTest: [args] :: GhciTest -> GhciArgs
+ Hix.Data.GhciTest: [cmdline] :: GhcidRun -> Text
+ Hix.Data.GhciTest: [ghci] :: GhcidRun -> GhciRun
+ Hix.Data.GhciTest: [run] :: GhciRun -> Maybe Text
+ Hix.Data.GhciTest: [scriptFile] :: GhciRun -> Path Abs File
+ Hix.Data.GhciTest: [script] :: GhciTest -> Text
+ Hix.Data.GhciTest: [searchPath] :: GhciTest -> [Path Abs Dir]
+ Hix.Data.GhciTest: [shell] :: GhciRun -> Text
+ Hix.Data.GhciTest: [test] :: GhciRun -> GhciTest
+ Hix.Data.GlobalOptions: [cwd] :: GlobalOptions -> Path Abs Dir
+ Hix.Data.GlobalOptions: [debug] :: GlobalOptions -> Bool
+ Hix.Data.GlobalOptions: [output] :: GlobalOptions -> OutputFormat
+ Hix.Data.GlobalOptions: [quiet] :: GlobalOptions -> Bool
+ Hix.Data.GlobalOptions: [target] :: GlobalOptions -> OutputTarget
+ Hix.Data.GlobalOptions: [verbose] :: GlobalOptions -> Bool
+ Hix.Data.Json: JsonEither :: Either a b -> JsonEither a b
+ Hix.Data.Json: instance (Data.Aeson.Types.FromJSON.FromJSON a, Data.Aeson.Types.FromJSON.FromJSON b) => Data.Aeson.Types.FromJSON.FromJSON (Hix.Data.Json.JsonEither a b)
+ Hix.Data.Json: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Hix.Data.Json.JsonEither a b)
+ Hix.Data.Json: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Hix.Data.Json.JsonEither a b)
+ Hix.Data.Json: jsonEither :: JsonEither a b -> Either a b
+ Hix.Data.Json: newtype JsonEither a b
+ Hix.Data.Monad: [cwd] :: AppResources -> Path Abs Dir
+ Hix.Data.Monad: [debug] :: AppResources -> Bool
+ Hix.Data.Monad: [logger] :: AppResources -> LogLevel -> Text -> M ()
+ Hix.Data.Monad: [output] :: AppResources -> OutputFormat
+ Hix.Data.Monad: [quiet] :: AppResources -> Bool
+ Hix.Data.Monad: [target] :: AppResources -> OutputTarget
+ Hix.Data.Monad: [tmp] :: AppResources -> Path Abs Dir
+ Hix.Data.Monad: [verbose] :: AppResources -> Bool
+ Hix.Data.NewProjectConfig: [author] :: NewProjectConfig -> Author
+ Hix.Data.NewProjectConfig: [hixUrl] :: NewProjectConfig -> HixUrl
+ Hix.Data.NewProjectConfig: [name] :: NewProjectConfig -> ProjectName
+ Hix.Data.NewProjectConfig: [packages] :: NewProjectConfig -> Bool
+ Hix.Data.NewProjectConfig: [unAuthor] :: Author -> Text
+ Hix.Data.NewProjectConfig: [unHixUrl] :: HixUrl -> Text
+ Hix.Data.NewProjectConfig: [unProjectName] :: ProjectName -> Text
+ Hix.Data.NixExpr: [name] :: ExprAttr -> Text
+ Hix.Data.NixExpr: [value] :: ExprAttr -> Expr
+ Hix.Data.Options: [build] :: ProjectOptions -> BuildConfig
+ Hix.Data.Options: [cabal] :: ManagedOptions -> CabalConfig
+ Hix.Data.Options: [cd] :: TestOptions -> ChangeDir
+ Hix.Data.Options: [cmd] :: Options -> Command
+ Hix.Data.Options: [common] :: LowerOptions -> ManagedOptions
+ Hix.Data.Options: [component] :: GhciOptions -> TargetSpec
+ Hix.Data.Options: [config] :: BootstrapOptions -> BootstrapProjectConfig
+ Hix.Data.Options: [context] :: ManagedOptions -> Either ProjectContextProto JsonConfig
+ Hix.Data.Options: [dir] :: ComponentSpec -> Maybe SourceDir
+ Hix.Data.Options: [envs] :: ProjectOptions -> [EnvName]
+ Hix.Data.Options: [extraGhci] :: EnvRunnerCommandOptions -> Maybe ExtraGhciOptions
+ Hix.Data.Options: [extraGhcid] :: EnvRunnerCommandOptions -> Maybe ExtraGhcidOptions
+ Hix.Data.Options: [extra] :: GhcidOptions -> Maybe ExtraGhcidOptions
+ Hix.Data.Options: [ghci] :: GhcidOptions -> GhciOptions
+ Hix.Data.Options: [global] :: Options -> GlobalOptions
+ Hix.Data.Options: [handlers] :: ManagedOptions -> Maybe SpecialBuildHandlers
+ Hix.Data.Options: [inFile] :: PreprocOptions -> Path Abs File
+ Hix.Data.Options: [initOnly] :: LowerOptions -> Bool
+ Hix.Data.Options: [mergeBounds] :: ProjectOptions -> Bool
+ Hix.Data.Options: [mod] :: TestOptions -> ModuleName
+ Hix.Data.Options: [name] :: ComponentSpec -> ComponentName
+ Hix.Data.Options: [options] :: EnvRunnerCommandOptions -> EnvRunnerOptions
+ Hix.Data.Options: [outFile] :: PreprocOptions -> Path Abs File
+ Hix.Data.Options: [package] :: ComponentCoords -> Maybe PackageSpec
+ Hix.Data.Options: [project] :: ManagedOptions -> ProjectOptions
+ Hix.Data.Options: [query] :: ProjectOptions -> RawQuery
+ Hix.Data.Options: [readUpperBounds] :: ProjectOptions -> Bool
+ Hix.Data.Options: [reset] :: LowerOptions -> Bool
+ Hix.Data.Options: [root] :: GhciOptions -> Maybe (Path Abs Dir)
+ Hix.Data.Options: [runner] :: TestOptions -> Maybe RunnerName
+ Hix.Data.Options: [source] :: PreprocOptions -> Path Abs File
+ Hix.Data.Options: [stabilize] :: LowerOptions -> Bool
+ Hix.Data.Options: [stateFile] :: ManagedOptions -> StateFileConfig
+ Hix.Data.Options: [test] :: EnvRunnerCommandOptions -> TestOptions
+ Hix.Data.Overrides: [hash] :: Override -> SourceHash
+ Hix.Data.Overrides: [version] :: Override -> Version
+ Hix.Data.PackageId: [name] :: PackageId -> PackageName
+ Hix.Data.PackageId: [version] :: PackageId -> Version
+ Hix.Data.PackageId: instance GHC.Classes.Ord Hix.Data.PackageId.PackageId
+ Hix.Data.PreprocConfig: [packages] :: PreprocConfig -> PackagesConfig
+ Hix.Data.ProjectFile: [content] :: ProjectFile -> Text
+ Hix.Data.ProjectFile: [path] :: ProjectFile -> Path Rel File
+ Hix.Data.Version: [prefix] :: Major -> Version
+ Hix.Data.Version: [versions] :: Major -> NonEmpty Version
+ Hix.Data.VersionBounds: [lower] :: VersionBounds -> Maybe Version
+ Hix.Data.VersionBounds: [upper] :: VersionBounds -> Maybe Version
+ Hix.Hackage: [versions] :: HackageVersions -> [String]
+ Hix.Managed.Build.NixOutput: BuildsState :: Integer -> Int -> Int -> [Bool] -> BuildsState
+ Hix.Managed.Build.NixOutput: Derivation :: Text -> (Seq Text, Seq Text) -> Derivation
+ Hix.Managed.Build.NixOutput: NixMessage :: NixAction
+ Hix.Managed.Build.NixOutput: NixResult :: Integer -> Int -> [Either Text Int] -> NixAction
+ Hix.Managed.Build.NixOutput: NixStart :: Integer -> Text -> NixAction
+ Hix.Managed.Build.NixOutput: NixStartBuilds :: Integer -> NixAction
+ Hix.Managed.Build.NixOutput: NixStartOther :: Integer -> NixAction
+ Hix.Managed.Build.NixOutput: NixStop :: Integer -> NixAction
+ Hix.Managed.Build.NixOutput: OutputResult :: Maybe (NonEmpty PackageDerivation) -> OutputResult
+ Hix.Managed.Build.NixOutput: OutputState :: Maybe BuildsState -> Map Integer Derivation -> [PackageDerivation] -> OutputState
+ Hix.Managed.Build.NixOutput: PackageDerivation :: PackageId -> Bool -> [Text] -> PackageDerivation
+ Hix.Managed.Build.NixOutput: StorePathName :: String -> StorePathName
+ Hix.Managed.Build.NixOutput: [aid] :: NixAction -> Integer
+ Hix.Managed.Build.NixOutput: [builds] :: OutputState -> Maybe BuildsState
+ Hix.Managed.Build.NixOutput: [done] :: BuildsState -> Int
+ Hix.Managed.Build.NixOutput: [failedPackages] :: OutputResult -> Maybe (NonEmpty PackageDerivation)
+ Hix.Managed.Build.NixOutput: [failed] :: BuildsState -> Int
+ Hix.Managed.Build.NixOutput: [fields] :: NixAction -> [Either Text Int]
+ Hix.Managed.Build.NixOutput: [finished] :: OutputState -> [PackageDerivation]
+ Hix.Managed.Build.NixOutput: [id] :: BuildsState -> Integer
+ Hix.Managed.Build.NixOutput: [log] :: PackageDerivation -> [Text]
+ Hix.Managed.Build.NixOutput: [package] :: PackageDerivation -> PackageId
+ Hix.Managed.Build.NixOutput: [path] :: Derivation -> Text
+ Hix.Managed.Build.NixOutput: [rtype] :: NixAction -> Int
+ Hix.Managed.Build.NixOutput: [running] :: OutputState -> Map Integer Derivation
+ Hix.Managed.Build.NixOutput: [success] :: PackageDerivation -> Bool
+ Hix.Managed.Build.NixOutput: [unassigned] :: BuildsState -> [Bool]
+ Hix.Managed.Build.NixOutput: addLogMessage :: Text -> Derivation -> Derivation
+ Hix.Managed.Build.NixOutput: data BuildsState
+ Hix.Managed.Build.NixOutput: data Derivation
+ Hix.Managed.Build.NixOutput: data NixAction
+ Hix.Managed.Build.NixOutput: data OutputResult
+ Hix.Managed.Build.NixOutput: data OutputState
+ Hix.Managed.Build.NixOutput: data PackageDerivation
+ Hix.Managed.Build.NixOutput: finish :: Bool -> Derivation -> Either String PackageDerivation
+ Hix.Managed.Build.NixOutput: instance Data.Aeson.Types.FromJSON.FromJSON Hix.Managed.Build.NixOutput.NixAction
+ Hix.Managed.Build.NixOutput: instance Data.Default.Class.Default Hix.Managed.Build.NixOutput.OutputState
+ Hix.Managed.Build.NixOutput: instance Distribution.Parsec.Parsec Hix.Managed.Build.NixOutput.StorePathName
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.BuildsState
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.Derivation
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.NixAction
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.OutputResult
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.OutputState
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.PackageDerivation
+ Hix.Managed.Build.NixOutput: instance GHC.Classes.Eq Hix.Managed.Build.NixOutput.StorePathName
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.BuildsState
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.Derivation
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.NixAction
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.OutputResult
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.OutputState
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.PackageDerivation
+ Hix.Managed.Build.NixOutput: instance GHC.Generics.Generic Hix.Managed.Build.NixOutput.StorePathName
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.BuildsState
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.Derivation
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.NixAction
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.OutputResult
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.OutputState
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.PackageDerivation
+ Hix.Managed.Build.NixOutput: instance GHC.Show.Show Hix.Managed.Build.NixOutput.StorePathName
+ Hix.Managed.Build.NixOutput: newtype StorePathName
+ Hix.Managed.Build.NixOutput: outputParse :: ByteString -> StateT OutputState M ()
+ Hix.Managed.Build.NixOutput: outputResult :: OutputState -> OutputResult
+ Hix.Managed.Build.NixOutput: parseError :: String -> StateT s M ()
+ Hix.Managed.Build.NixOutput: processMessage :: ByteString -> NixAction -> StateT OutputState M ()
+ Hix.Managed.Build.NixOutput: processResult :: Integer -> Int -> [Either Text Int] -> OutputState -> OutputState
+ Hix.Managed.Build.NixOutput: reportFinished :: Either Derivation PackageDerivation -> StateT OutputState M ()
+ Hix.Managed.Build.NixOutput: runOutputState :: Monad m => StateT OutputState m a -> m (a, OutputResult)
+ Hix.Managed.Build.NixOutput: tryFinish :: Maybe BuildsState -> Maybe Derivation -> (Maybe (Either Derivation PackageDerivation), [PackageDerivation], Maybe BuildsState)
+ Hix.Managed.Build.NixOutput: updateBuilds :: [Either Text Int] -> OutputState -> OutputState
+ Hix.Managed.Build.NixOutput.Analysis: analyzeLog :: [Text] -> Maybe (NonEmpty Dep)
+ Hix.Managed.Build.Solve: checkRevision :: Bool -> CabalHandlers -> PackageId -> Either PackageId PackageId
+ Hix.Managed.Cabal.Changes: [changes] :: SolverPlan -> [PackageId]
+ Hix.Managed.Cabal.Changes: [matching] :: SolverPlan -> [PackageId]
+ Hix.Managed.Cabal.Changes: [nonReinstallable] :: SolverPlan -> Maybe (NonEmpty PackageId)
+ Hix.Managed.Cabal.Changes: [overrides] :: SolverChanges -> [PackageId]
+ Hix.Managed.Cabal.Changes: [projectDeps] :: SolverChanges -> Versions
+ Hix.Managed.Cabal.Changes: [versions] :: SolverChanges -> Versions
+ Hix.Managed.Cabal.Data.Config: [allowBoot] :: SolveConfig -> Bool
+ Hix.Managed.Cabal.Data.Config: [cabal] :: SolveConfig -> CabalConfig
+ Hix.Managed.Cabal.Data.Config: [ghc] :: SolveConfig -> Maybe GhcPath
+ Hix.Managed.Cabal.Data.Config: [hackageRepoName] :: SolveConfig -> HackageRepoName
+ Hix.Managed.Cabal.Data.Config: [indexState] :: CabalConfig -> Maybe HackageIndexState
+ Hix.Managed.Cabal.Data.Config: [verbosity] :: SolveConfig -> Verbosity
+ Hix.Managed.Cabal.Data.Packages: [available] :: GhcPackages -> SourcePackages
+ Hix.Managed.Cabal.Data.Packages: [installed] :: GhcPackages -> InstalledPackages
+ Hix.Managed.Cabal.Data.SolveResources: [compiler] :: SolveResources -> CompilerInfo
+ Hix.Managed.Cabal.Data.SolveResources: [conf] :: SolveResources -> SolveConfig
+ Hix.Managed.Cabal.Data.SolveResources: [flags] :: SolveResources -> SolveFlags
+ Hix.Managed.Cabal.Data.SolveResources: [installedPkgIndex] :: SolveResources -> InstalledPackageIndex
+ Hix.Managed.Cabal.Data.SolveResources: [pkgConfigDb] :: SolveResources -> PkgConfigDb
+ Hix.Managed.Cabal.Data.SolveResources: [platform] :: SolveResources -> Platform
+ Hix.Managed.Cabal.Data.SolveResources: [solverParams] :: SolveResources -> DepResolverParams -> DepResolverParams
+ Hix.Managed.Cabal.Data.SolveResources: [sourcePkgDb] :: SolveResources -> SourcePackageDb
+ Hix.Managed.Cabal.Data.SolveTarget: [dep] :: SolveTarget -> PackageSpecifier UnresolvedSourcePackage
+ Hix.Managed.Cabal.Data.SolveTarget: [prefs] :: SolveTarget -> [PackagePreference]
+ Hix.Managed.Cabal.Data.SolverState: [allowNewer] :: SolverFlags -> Bool
+ Hix.Managed.Cabal.Data.SolverState: [forceRevisions] :: SolverFlags -> Bool
+ Hix.Managed.Cabal.Data.SourcePackage: SourcePackage :: Map Version SourcePackageId -> SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: SourcePackageId :: [Dep] -> Maybe PackageDescription -> SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: [deps] :: SourcePackageId -> [Dep]
+ Hix.Managed.Cabal.Data.SourcePackage: [description] :: SourcePackageId -> Maybe PackageDescription
+ Hix.Managed.Cabal.Data.SourcePackage: data SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: instance Distribution.Pretty.Pretty Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance Distribution.Pretty.Pretty Hix.Managed.Cabal.Data.SourcePackage.SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Base.Monoid Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Base.Semigroup Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Classes.Eq Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Classes.Eq Hix.Managed.Cabal.Data.SourcePackage.SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Generics.Generic Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Generics.Generic Hix.Managed.Cabal.Data.SourcePackage.SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.IsList.IsList Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Show.Show Hix.Managed.Cabal.Data.SourcePackage.SourcePackage
+ Hix.Managed.Cabal.Data.SourcePackage: instance GHC.Show.Show Hix.Managed.Cabal.Data.SourcePackage.SourcePackageId
+ Hix.Managed.Cabal.Data.SourcePackage: instance Hix.Class.Map.NMap Hix.Managed.Cabal.Data.SourcePackage.SourcePackage Distribution.Types.Version.Version Hix.Managed.Cabal.Data.SourcePackage.SourcePackageId Hix.Class.Map.LookupMonoid
+ Hix.Managed.Cabal.Data.SourcePackage: instance Hix.Class.Map.NMap Hix.Managed.Cabal.Data.SourcePackage.SourcePackages Hix.Data.PackageName.PackageName Hix.Managed.Cabal.Data.SourcePackage.SourcePackage Hix.Class.Map.LookupMaybe
+ Hix.Managed.Cabal.Data.SourcePackage: newtype SourcePackage
+ Hix.Managed.Cabal.Init: [global] :: SolveFlags -> GlobalFlags
+ Hix.Managed.Cabal.Init: [main] :: SolveFlags -> NixStyleFlags ()
+ Hix.Managed.Cabal.Solve: solveWithCabal' :: SolveResources -> SolverState -> M (Maybe SolverInstallPlan)
+ Hix.Managed.Cabal.Source: sourcePackage :: SourcePackageDb -> PackageId -> Maybe PackageDescription
+ Hix.Managed.Data.BuildConfig: [buildOutput] :: BuildConfig -> Bool
+ Hix.Managed.Data.BuildConfig: [disableNixMonitor] :: BuildConfig -> Bool
+ Hix.Managed.Data.BuildConfig: [lookup] :: BuildConfig -> Bool
+ Hix.Managed.Data.BuildConfig: [maxFailedPost] :: BuildConfig -> Natural
+ Hix.Managed.Data.BuildConfig: [maxFailedPre] :: BuildConfig -> Natural
+ Hix.Managed.Data.BuildConfig: [maxIterations] :: BuildConfig -> Natural
+ Hix.Managed.Data.BuildConfig: [timeout] :: BuildConfig -> Maybe BuildTimeout
+ Hix.Managed.Data.BuildConfig: [toposortMutations] :: BuildConfig -> Bool
+ Hix.Managed.Data.BuildConfig: [validate] :: BuildConfig -> Bool
+ Hix.Managed.Data.BuildOutput: [failedNames] :: BuildOutput -> Maybe Text
+ Hix.Managed.Data.BuildOutput: [failed] :: BuildOutput -> [MutableDep]
+ Hix.Managed.Data.BuildOutput: [modifiedNames] :: BuildOutput -> Maybe Text
+ Hix.Managed.Data.BuildOutput: [modified] :: BuildOutput -> [ModifiedId]
+ Hix.Managed.Data.BuildOutput: [package] :: ModifiedId -> MutableDep
+ Hix.Managed.Data.BuildOutput: [range] :: ModifiedId -> Maybe VersionBounds
+ Hix.Managed.Data.BuildOutput: [unmodifiedNames] :: BuildOutput -> Maybe Text
+ Hix.Managed.Data.BuildOutput: [unmodified] :: BuildOutput -> [MutableDep]
+ Hix.Managed.Data.BuildOutput: [version] :: ModifiedId -> Version
+ Hix.Managed.Data.Bump: [bound] :: Bump -> Version
+ Hix.Managed.Data.Bump: [changed] :: Bump -> Bool
+ Hix.Managed.Data.Bump: [version] :: Bump -> Version
+ Hix.Managed.Data.Constraints: [force] :: MutationConstraints -> Maybe VersionRange
+ Hix.Managed.Data.Constraints: [installed] :: MutationConstraints -> Maybe Bool
+ Hix.Managed.Data.Constraints: [mutation] :: MutationConstraints -> VersionBounds
+ Hix.Managed.Data.Constraints: [oldest] :: MutationConstraints -> Maybe Bool
+ Hix.Managed.Data.Constraints: [prefer] :: MutationConstraints -> Maybe VersionRange
+ Hix.Managed.Data.CurrentBuild: [target] :: CurrentBuild -> LocalPackage
+ Hix.Managed.Data.Diff: [detail] :: Diff d a -> d
+ Hix.Managed.Data.Diff: [new] :: Diff d a -> a
+ Hix.Managed.Data.Diff: [original] :: Diff d a -> a
+ Hix.Managed.Data.EnvConfig: [ghc] :: EnvConfig -> GhcDb
+ Hix.Managed.Data.EnvConfig: [targets] :: EnvConfig -> [LocalPackage]
+ Hix.Managed.Data.EnvContext: [deps] :: EnvContext -> EnvDeps
+ Hix.Managed.Data.EnvContext: [env] :: EnvContext -> EnvName
+ Hix.Managed.Data.EnvContext: [ghc] :: EnvContext -> GhcDb
+ Hix.Managed.Data.EnvContext: [local] :: EnvDeps -> Set LocalPackage
+ Hix.Managed.Data.EnvContext: [mutable] :: EnvDeps -> Set MutableDep
+ Hix.Managed.Data.EnvContext: [query] :: EnvContext -> NonEmpty MutableDep
+ Hix.Managed.Data.EnvContext: [solverBounds] :: EnvContext -> Ranges
+ Hix.Managed.Data.EnvContext: [targets] :: EnvContext -> Targets
+ Hix.Managed.Data.EnvRequest: [builder] :: EnvRequest -> EnvBuilder
+ Hix.Managed.Data.EnvRequest: [context] :: EnvRequest -> EnvContext
+ Hix.Managed.Data.EnvRequest: [state] :: EnvRequest -> Initial EnvState
+ Hix.Managed.Data.EnvResult: [env] :: EnvResult -> EnvName
+ Hix.Managed.Data.EnvResult: [state] :: EnvResult -> Maybe EnvState
+ Hix.Managed.Data.EnvResult: [summaries] :: EnvResult -> NonEmpty StageSummary
+ Hix.Managed.Data.EnvState: [bounds] :: EnvState -> MutableDeps BoundsChange
+ Hix.Managed.Data.EnvState: [initial] :: EnvState -> MutableDeps VersionChange
+ Hix.Managed.Data.EnvState: [overrides] :: EnvState -> Overrides
+ Hix.Managed.Data.EnvState: [versions] :: EnvState -> MutableDeps VersionChange
+ Hix.Managed.Data.Lower: [majors] :: Lower -> NonEmpty Major
+ Hix.Managed.Data.LowerConfig: [initOnly] :: LowerConfig -> Bool
+ Hix.Managed.Data.LowerConfig: [reset] :: LowerConfig -> Bool
+ Hix.Managed.Data.LowerConfig: [stabilize] :: LowerConfig -> Bool
+ Hix.Managed.Data.ManagedPackage: [local] :: ManagedPackage -> LocalRanges
+ Hix.Managed.Data.ManagedPackage: [mutable] :: ManagedPackage -> MutableRanges
+ Hix.Managed.Data.ManagedPackage: [package] :: ManagedPackage -> LocalPackage
+ Hix.Managed.Data.ManagedPackage: [version] :: ManagedPackage -> Version
+ Hix.Managed.Data.ManagedPackageProto: [deps] :: ManagedPackageProto -> [Dep]
+ Hix.Managed.Data.ManagedPackageProto: [name] :: ManagedPackageProto -> LocalPackage
+ Hix.Managed.Data.ManagedPackageProto: [version] :: ManagedPackageProto -> Version
+ Hix.Managed.Data.MutableId: [name] :: MutableId -> MutableDep
+ Hix.Managed.Data.MutableId: [version] :: MutableId -> Version
+ Hix.Managed.Data.Mutation: [candidate] :: MutationResult s -> MutableId
+ Hix.Managed.Data.Mutation: [changed] :: MutationResult s -> Bool
+ Hix.Managed.Data.Mutation: [description] :: BuildMutation -> Text
+ Hix.Managed.Data.Mutation: [ext] :: MutationResult s -> s
+ Hix.Managed.Data.Mutation: [mutation] :: FailedMutation -> Text
+ Hix.Managed.Data.Mutation: [package] :: FailedMutation -> MutableDep
+ Hix.Managed.Data.Mutation: [retract] :: DepMutation a -> Bool
+ Hix.Managed.Data.Mutation: [revisions] :: MutationResult s -> Set PackageId
+ Hix.Managed.Data.Mutation: [solverState] :: BuildMutation -> SolverState
+ Hix.Managed.Data.Mutation: [state] :: MutationResult s -> MutationState
+ Hix.Managed.Data.Mutation: [updateBound] :: BuildMutation -> Version -> VersionBounds -> VersionBounds
+ Hix.Managed.Data.MutationMode: [foo] :: MutationMode -> Int
+ Hix.Managed.Data.MutationState: [bounds] :: MutationState -> MutableBounds
+ Hix.Managed.Data.MutationState: [initial] :: MutationState -> MutableVersions
+ Hix.Managed.Data.MutationState: [overrides] :: MutationState -> Overrides
+ Hix.Managed.Data.MutationState: [versions] :: MutationState -> MutableVersions
+ Hix.Managed.Data.ProcessState: [packages] :: ProcessState -> Packages ManagedPackage
+ Hix.Managed.Data.ProcessState: [state] :: ProcessState -> ProjectState
+ Hix.Managed.Data.ProjectContext: [build] :: ProjectContext -> BuildConfig
+ Hix.Managed.Data.ProjectContext: [envs] :: ProjectContext -> NonEmpty (Either EnvName EnvContext)
+ Hix.Managed.Data.ProjectContext: [packages] :: ProjectContext -> Packages ManagedPackage
+ Hix.Managed.Data.ProjectContext: [state] :: ProjectContext -> ProjectState
+ Hix.Managed.Data.ProjectContextProto: [buildOutputsPrefix] :: ProjectContextProto -> Maybe BuildOutputsPrefix
+ Hix.Managed.Data.ProjectContextProto: [envs] :: ProjectContextProto -> Envs EnvConfig
+ Hix.Managed.Data.ProjectContextProto: [packages] :: ProjectContextProto -> Packages ManagedPackageProto
+ Hix.Managed.Data.ProjectContextProto: [state] :: ProjectContextProto -> ProjectStateProto
+ Hix.Managed.Data.ProjectResult: [envs] :: ProjectResult -> NonEmpty EnvResult
+ Hix.Managed.Data.ProjectResult: [state] :: ProjectResult -> ProjectState
+ Hix.Managed.Data.ProjectState: [bounds] :: ProjectState -> Packages MutableBounds
+ Hix.Managed.Data.ProjectState: [initial] :: ProjectState -> Envs MutableVersions
+ Hix.Managed.Data.ProjectState: [overrides] :: ProjectState -> Envs Overrides
+ Hix.Managed.Data.ProjectState: [resolving] :: ProjectState -> Bool
+ Hix.Managed.Data.ProjectState: [versions] :: ProjectState -> Envs MutableVersions
+ Hix.Managed.Data.ProjectStateProto: [bounds] :: ProjectStateProto -> Packages Bounds
+ Hix.Managed.Data.ProjectStateProto: [initial] :: ProjectStateProto -> Envs Versions
+ Hix.Managed.Data.ProjectStateProto: [overrides] :: ProjectStateProto -> Envs Overrides
+ Hix.Managed.Data.ProjectStateProto: [resolving] :: ProjectStateProto -> Bool
+ Hix.Managed.Data.ProjectStateProto: [versions] :: ProjectStateProto -> Envs Versions
+ Hix.Managed.Data.QueryDep: [bounds] :: QueryDep -> VersionBounds
+ Hix.Managed.Data.QueryDep: [current] :: QueryDep -> Maybe Version
+ Hix.Managed.Data.QueryDep: [installed] :: QueryDep -> Maybe Version
+ Hix.Managed.Data.QueryDep: [override] :: QueryDep -> Maybe Version
+ Hix.Managed.Data.QueryDep: [package] :: QueryDep -> MutableDep
+ Hix.Managed.Data.StageContext: [builder] :: StageContext -> EnvBuilder
+ Hix.Managed.Data.StageContext: [env] :: StageContext -> EnvContext
+ Hix.Managed.Data.StageContext: [initial] :: StageContext -> MutableVersions
+ Hix.Managed.Data.StageContext: [query] :: StageContext -> Query
+ Hix.Managed.Data.StageContext: [state] :: StageContext -> Initial MutationState
+ Hix.Managed.Data.StageResult: [state] :: StageResult -> Maybe MutationState
+ Hix.Managed.Data.StageResult: [summary] :: StageResult -> StageSummary
+ Hix.Managed.Data.StageState: BuildFailure :: BuildFailure -> BuildResult
+ Hix.Managed.Data.StageState: BuildSuccess :: BuildResult
+ Hix.Managed.Data.StageState: PackageFailure :: NonEmpty PackageDerivation -> BuildFailure
+ Hix.Managed.Data.StageState: TimeoutFailure :: [PackageId] -> BuildFailure
+ Hix.Managed.Data.StageState: UnknownFailure :: BuildFailure
+ Hix.Managed.Data.StageState: [ext] :: StageState a s -> s
+ Hix.Managed.Data.StageState: [failed] :: StageState a s -> [DepMutation a]
+ Hix.Managed.Data.StageState: [iterations] :: StageState a s -> Natural
+ Hix.Managed.Data.StageState: [revisions] :: StageState a s -> Set PackageId
+ Hix.Managed.Data.StageState: [state] :: StageState a s -> MutationState
+ Hix.Managed.Data.StageState: [success] :: StageState a s -> Map MutableDep BuildSuccess
+ Hix.Managed.Data.StageState: data BuildFailure
+ Hix.Managed.Data.StageState: instance GHC.Classes.Eq Hix.Managed.Data.StageState.BuildFailure
+ Hix.Managed.Data.StageState: instance GHC.Generics.Generic Hix.Managed.Data.StageState.BuildFailure
+ Hix.Managed.Data.StageState: instance GHC.Show.Show Hix.Managed.Data.StageState.BuildFailure
+ Hix.Managed.Data.StageState: resultFromStatus :: BuildStatus -> BuildResult
+ Hix.Managed.Data.StateFileConfig: [file] :: StateFileConfig -> Path Rel File
+ Hix.Managed.Data.StateFileConfig: [projectRoot] :: StateFileConfig -> Maybe (Path Abs Dir)
+ Hix.Managed.EnvResult: [added] :: DepResults -> [DepResult]
+ Hix.Managed.EnvResult: [bounds] :: DepResult -> VersionBounds
+ Hix.Managed.EnvResult: [detail] :: DepResult -> DepResultDetail
+ Hix.Managed.EnvResult: [package] :: DepResult -> MutableDep
+ Hix.Managed.EnvResult: [unmodified] :: DepResults -> [DepResult]
+ Hix.Managed.EnvResult: [updated] :: DepResults -> [DepResult]
+ Hix.Managed.EnvResult: [version] :: DepResult -> Version
+ Hix.Managed.Handlers.Build: [buildWithState] :: EnvBuilder -> Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))
+ Hix.Managed.Handlers.Build: [cabal] :: BuildHandlers -> Packages ManagedPackage -> GhcDb -> M CabalHandlers
+ Hix.Managed.Handlers.Build: [latestVersion] :: BuildHandlers -> PackageName -> M (Maybe Version)
+ Hix.Managed.Handlers.Build: [report] :: BuildHandlers -> ReportHandlers
+ Hix.Managed.Handlers.Build: [stateFile] :: BuildHandlers -> StateFileHandlers
+ Hix.Managed.Handlers.Build: [versions] :: BuildHandlers -> PackageName -> M [Version]
+ Hix.Managed.Handlers.Build: [withBuilder] :: BuildHandlers -> forall a. () => (Builder -> M a) -> M a
+ Hix.Managed.Handlers.Build: [withEnvBuilder] :: Builder -> forall a. () => CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a
+ Hix.Managed.Handlers.Build.Prod: NixProcFailure :: Text -> NixProcResult
+ Hix.Managed.Handlers.Build.Prod: NixProcSuccess :: [Text] -> NixProcResult
+ Hix.Managed.Handlers.Build.Prod: OutputDebug :: OutputConfig
+ Hix.Managed.Handlers.Build.Prod: OutputIgnore :: OutputConfig
+ Hix.Managed.Handlers.Build.Prod: OutputParse :: OutputConfig
+ Hix.Managed.Handlers.Build.Prod: [buildConfig] :: BuilderResources -> BuildConfig
+ Hix.Managed.Handlers.Build.Prod: [buildOutputsPrefix] :: BuilderResources -> Maybe BuildOutputsPrefix
+ Hix.Managed.Handlers.Build.Prod: [context] :: EnvBuilderResources -> EnvContext
+ Hix.Managed.Handlers.Build.Prod: [envsConf] :: BuilderResources -> Envs EnvConfig
+ Hix.Managed.Handlers.Build.Prod: [global] :: EnvBuilderResources -> BuilderResources
+ Hix.Managed.Handlers.Build.Prod: [hackage] :: BuilderResources -> HackageHandlers
+ Hix.Managed.Handlers.Build.Prod: [root] :: BuilderResources -> Path Abs Dir
+ Hix.Managed.Handlers.Build.Prod: [stateFileHandlers] :: BuilderResources -> StateFileHandlers
+ Hix.Managed.Handlers.Build.Prod: buildAdaptive :: EnvBuilderResources -> Bool -> LocalPackage -> StateT (Overrides, Set PackageId) M BuildResult
+ Hix.Managed.Handlers.Build.Prod: buildTarget :: BuildConfig -> Path Abs Dir -> EnvName -> LocalPackage -> M BuildResult
+ Hix.Managed.Handlers.Build.Prod: data NixProcResult
+ Hix.Managed.Handlers.Build.Prod: data OutputConfig
+ Hix.Managed.Handlers.Build.Prod: instance GHC.Classes.Eq Hix.Managed.Handlers.Build.Prod.NixProcResult
+ Hix.Managed.Handlers.Build.Prod: instance GHC.Generics.Generic Hix.Managed.Handlers.Build.Prod.NixProcResult
+ Hix.Managed.Handlers.Build.Prod: instance GHC.Show.Show Hix.Managed.Handlers.Build.Prod.NixProcResult
+ Hix.Managed.Handlers.Build.Prod: outputLines :: MonadIO m => (ByteString -> m ()) -> Handle -> m (Maybe Text)
+ Hix.Managed.Handlers.Build.Prod: outputResult :: Maybe (Either Error (Maybe Text, OutputResult)) -> ExitCode -> M BuildResult
+ Hix.Managed.Handlers.Build.Prod: runProc :: BuildConfig -> (Handle -> IO a) -> ProcessConfig () () (Maybe Handle) -> M (Maybe (Maybe a, ExitCode))
+ Hix.Managed.Handlers.Cabal: [installedVersion] :: CabalHandlers -> PackageName -> Maybe Version
+ Hix.Managed.Handlers.Cabal: [solveForVersion] :: CabalHandlers -> SolverState -> M (Maybe SolverPlan)
+ Hix.Managed.Handlers.Cabal: [sortMutations] :: CabalHandlers -> forall a. () => [DepMutation a] -> M [DepMutation a]
+ Hix.Managed.Handlers.Cabal: [sourcePackage] :: CabalHandlers -> PackageId -> Maybe PackageDescription
+ Hix.Managed.Handlers.Hackage: [fetchHash] :: HackageHandlers -> PackageId -> M SourceHash
+ Hix.Managed.Handlers.Hackage.Prod: handlersProdWith :: MonadIO m => Map Text SourceHash -> m HackageHandlers
+ Hix.Managed.Handlers.Mutation: [process] :: MutationHandlers a s -> s -> DepMutation a -> (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult s)
+ Hix.Managed.Handlers.Report: [mutations] :: ReportHandlers -> ProjectResult -> M ()
+ Hix.Managed.Handlers.StateFile: [writeFile] :: StateFileHandlers -> Maybe (Path Abs Dir) -> Expr -> M ()
+ Hix.Managed.Lower.Data.LowerMode: [firstSuccess] :: LowerMode -> Bool
+ Hix.Managed.Lower.Data.LowerMode: [noSuccess] :: LowerMode -> MutationResult SolverState
+ Hix.Monad: [cwd] :: AppResources -> Path Abs Dir
+ Hix.Monad: [debug] :: AppResources -> Bool
+ Hix.Monad: [logger] :: AppResources -> LogLevel -> Text -> M ()
+ Hix.Monad: [output] :: AppResources -> OutputFormat
+ Hix.Monad: [quiet] :: AppResources -> Bool
+ Hix.Monad: [target] :: AppResources -> OutputTarget
+ Hix.Monad: [tmp] :: AppResources -> Path Abs Dir
+ Hix.Monad: [verbose] :: AppResources -> Bool
+ Hix.Monad: runMUsing :: AppResources -> M a -> IO (Either Error a)
+ Hix.Optparse: [unJsonConfig] :: JsonConfig -> IO (Either String Value)
+ Hix.OutputWriter: [bytes] :: OutputWriter -> ByteString -> M ()
+ Hix.OutputWriter: [file] :: WriteError -> Path Abs File
+ Hix.OutputWriter: [msg] :: WriteError -> Text
+ Hix.OutputWriter: [textAppend] :: OutputWriter -> Text -> M ()
+ Hix.OutputWriter: [text] :: OutputWriter -> Text -> M ()
+ Hix.Prelude: [local] :: Prelude -> Bool
+ Hix.Prelude: [preludeModule] :: Prelude -> String
+ Hix.Prelude: [preludePackage] :: Prelude -> String
+ Hix.Preproc: [exportsSelf] :: ScanState -> Bool
+ Hix.Preproc: [extensions] :: CabalConfig -> [Builder]
+ Hix.Preproc: [ghcOptions] :: CabalConfig -> [Builder]
+ Hix.Preproc: [importLines] :: ScanState -> [ByteString]
+ Hix.Preproc: [importsEndLine] :: Header -> Int
+ Hix.Preproc: [importsLength] :: ScanState -> Int
+ Hix.Preproc: [moduleEndLine] :: Header -> Int
+ Hix.Preproc: [moduleLength] :: ScanState -> Int
+ Hix.Preproc: [moduleLines] :: ScanState -> [ByteString]
+ Hix.Preproc: [moduleName] :: ScanState -> Maybe ByteString
+ Hix.Preproc: [phase] :: ScanState -> Phase
+ Hix.Preproc: [prelude] :: ScanState -> CustomPrelude
+ Hix.Preproc: [rest] :: Header -> Builder
+ Hix.Preproc: [unDummyExportName] :: DummyExportName -> ByteString
- Hix.CabalParsec: eitherParsecFor :: Parsec b => ToString a => String -> a -> Either String b
+ Hix.CabalParsec: eitherParsecFor :: (Parsec b, ToString a) => String -> a -> Either String b
- Hix.CabalParsec: parsecM :: Parsec b => ToString a => String -> a -> M b
+ Hix.CabalParsec: parsecM :: (Parsec b, ToString a) => String -> a -> M b
- Hix.CabalParsec: unsafeParsec :: forall a b. Parsec b => Typeable b => ToString a => a -> b
+ Hix.CabalParsec: unsafeParsec :: forall a b. (Parsec b, Typeable b, ToString a) => a -> b
- Hix.CabalParsec: unsafeParsecFor :: Parsec b => ToString a => String -> a -> b
+ Hix.CabalParsec: unsafeParsecFor :: (Parsec b, ToString a) => String -> a -> b
- Hix.Class.EncodeNix: class EncodeField field
+ Hix.Class.EncodeNix: class EncodeField (field :: FieldK)
- Hix.Class.EncodeNix: encodeNix :: (EncodeNix a, EncodeProd a) => a -> Expr
+ Hix.Class.EncodeNix: encodeNix :: EncodeNix a => a -> Expr
- Hix.Class.Map: (!!) :: forall map k v sort l. NMap map k v sort => NLookup sort k v l => map -> k -> l
+ Hix.Class.Map: (!!) :: (NMap map k v sort, NLookup sort k v l) => map -> k -> l
- Hix.Class.Map: (!?) :: forall map k v sort. NMap map k v sort => map -> k -> Maybe v
+ Hix.Class.Map: (!?) :: NMap map k v sort => map -> k -> Maybe v
- Hix.Class.Map: class (Ord k, Coercible map (Map k v)) => NMap map k v sort | map -> k v sort
+ Hix.Class.Map: class (Ord k, Coercible map Map k v) => NMap map k v sort | map -> k v sort
- Hix.Class.Map: lookupError :: forall k v. Show k => Text -> k -> Maybe v -> M v
+ Hix.Class.Map: lookupError :: Show k => Text -> k -> Maybe v -> M v
- Hix.Class.Map: nAdjust :: forall map k v sort. NMap map k v sort => k -> map -> (v -> v) -> map
+ Hix.Class.Map: nAdjust :: NMap map k v sort => k -> map -> (v -> v) -> map
- Hix.Class.Map: nAmend :: forall map1 map2 k v1 v2 s1 s2. NMap map1 k v1 s1 => NMap map2 k v2 s2 => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nAmend :: forall map1 map2 k v1 v2 s1 s2. (NMap map1 k v1 s1, NMap map2 k v2 s2) => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nAmend1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nAmend1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nAmendWithKey :: forall map1 map2 k v1 v2 s1 s2. NMap map1 k v1 s1 => NMap map2 k v2 s2 => (k -> v1 -> v2 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nAmendWithKey :: forall map1 map2 k v1 v2 s1 s2. (NMap map1 k v1 s1, NMap map2 k v2 s2) => (k -> v1 -> v2 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nBy :: Foldable t => NMap map k v sort => t v -> (v -> k) -> map
+ Hix.Class.Map: nBy :: (Foldable t, NMap map k v sort) => t v -> (v -> k) -> map
- Hix.Class.Map: nCatMaybes :: NMap map1 k (Maybe v) sort1 => NMap map2 k v sort2 => map1 -> map2
+ Hix.Class.Map: nCatMaybes :: (NMap map1 k (Maybe v) sort1, NMap map2 k v sort2) => map1 -> map2
- Hix.Class.Map: nConcat :: Monoid a => NMap map k v sort => map -> (k -> v -> a) -> a
+ Hix.Class.Map: nConcat :: (Monoid a, NMap map k v sort) => map -> (k -> v -> a) -> a
- Hix.Class.Map: nConcatWith :: Monoid a => NMap map k v sort => (k -> v -> a) -> map -> a
+ Hix.Class.Map: nConcatWith :: (Monoid a, NMap map k v sort) => (k -> v -> a) -> map -> a
- Hix.Class.Map: nElems :: forall map k v s. NMap map k v s => map -> [v]
+ Hix.Class.Map: nElems :: NMap map k v s => map -> [v]
- Hix.Class.Map: nElems1 :: forall map1 map2 k1 k2 v s1 s2. NMap map1 k1 map2 s1 => NMap map2 k2 v s2 => map1 -> [v]
+ Hix.Class.Map: nElems1 :: forall map1 map2 k1 k2 v s1 s2. (NMap map1 k1 map2 s1, NMap map2 k2 v s2) => map1 -> [v]
- Hix.Class.Map: nFatal :: forall map k v sort. Show k => NMap map k v sort => Text -> k -> map -> M v
+ Hix.Class.Map: nFatal :: forall map k v sort. (Show k, NMap map k v sort) => Text -> k -> map -> M v
- Hix.Class.Map: nFilter :: forall map k v sort. NMap map k v sort => (v -> Bool) -> map -> map
+ Hix.Class.Map: nFilter :: NMap map k v sort => (v -> Bool) -> map -> map
- Hix.Class.Map: nFilter1 :: forall map map' k k' v s s'. NMap map k map' s => NMap map' k' v s' => (v -> Bool) -> map -> map
+ Hix.Class.Map: nFilter1 :: forall map map' k k' v s s'. (NMap map k map' s, NMap map' k' v s') => (v -> Bool) -> map -> map
- Hix.Class.Map: nFlatten :: forall map1 map2 map3 k1 k2 v1 v2 s1 s2. Monoid map2 => NMap map1 k1 map2 LookupMonoid => NMap map2 k2 v1 s1 => NMap map3 k2 v2 s2 => (v1 -> v2) -> map1 -> map3
+ Hix.Class.Map: nFlatten :: forall map1 map2 map3 k1 k2 v1 v2 s1 s2. (Monoid map2, NMap map1 k1 map2 LookupMonoid, NMap map2 k2 v1 s1, NMap map3 k2 v2 s2) => (v1 -> v2) -> map1 -> map3
- Hix.Class.Map: nFor :: Applicative m => NMap map k v sort => [v] -> (v -> m k) -> m map
+ Hix.Class.Map: nFor :: (Applicative m, NMap map k v sort) => [v] -> (v -> m k) -> m map
- Hix.Class.Map: nForKeys :: Applicative m => NMap map k v sort => [k] -> (k -> m v) -> m map
+ Hix.Class.Map: nForKeys :: (Applicative m, NMap map k v sort) => [k] -> (k -> m v) -> m map
- Hix.Class.Map: nFromKeys :: Foldable t => NMap map k v sort => t k -> (k -> v) -> map
+ Hix.Class.Map: nFromKeys :: (Foldable t, NMap map k v sort) => t k -> (k -> v) -> map
- Hix.Class.Map: nFromKeysMaybe :: Foldable t => NMap map k v sort => t k -> (k -> Maybe v) -> map
+ Hix.Class.Map: nFromKeysMaybe :: (Foldable t, NMap map k v sort) => t k -> (k -> Maybe v) -> map
- Hix.Class.Map: nGen :: Foldable t => NMap map k v sort => t a -> (a -> (k, v)) -> map
+ Hix.Class.Map: nGen :: (Foldable t, NMap map k v sort) => t a -> (a -> (k, v)) -> map
- Hix.Class.Map: nGenMaybe :: Foldable t => NMap map k v sort => t a -> (a -> Maybe (k, v)) -> map
+ Hix.Class.Map: nGenMaybe :: (Foldable t, NMap map k v sort) => t a -> (a -> Maybe (k, v)) -> map
- Hix.Class.Map: nGenWith :: Foldable t => NMap map k v sort => (a -> (k, v)) -> t a -> map
+ Hix.Class.Map: nGenWith :: (Foldable t, NMap map k v sort) => (a -> (k, v)) -> t a -> map
- Hix.Class.Map: nInsert :: forall map k v sort. NMap map k v sort => k -> v -> map -> map
+ Hix.Class.Map: nInsert :: NMap map k v sort => k -> v -> map -> map
- Hix.Class.Map: nMap :: NMap map1 k v1 sort1 => NMap map2 k v2 sort2 => (v1 -> v2) -> map1 -> map2
+ Hix.Class.Map: nMap :: (NMap map1 k v1 sort1, NMap map2 k v2 sort2) => (v1 -> v2) -> map1 -> map2
- Hix.Class.Map: nMap1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (v1 -> v2) -> map1 -> map2
+ Hix.Class.Map: nMap1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (v1 -> v2) -> map1 -> map2
- Hix.Class.Map: nMapKeys :: NMap map1 k1 v sort1 => NMap map2 k2 v sort2 => (k1 -> k2) -> map1 -> map2
+ Hix.Class.Map: nMapKeys :: (NMap map1 k1 v sort1, NMap map2 k2 v sort2) => (k1 -> k2) -> map1 -> map2
- Hix.Class.Map: nMapMaybe :: NMap map1 k v1 sort1 => NMap map2 k v2 sort2 => (v1 -> Maybe v2) -> map1 -> map2
+ Hix.Class.Map: nMapMaybe :: (NMap map1 k v1 sort1, NMap map2 k v2 sort2) => (v1 -> Maybe v2) -> map1 -> map2
- Hix.Class.Map: nMapMaybe1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (v1 -> Maybe v2) -> map1 -> map2
+ Hix.Class.Map: nMapMaybe1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (v1 -> Maybe v2) -> map1 -> map2
- Hix.Class.Map: nMapMaybeWithKey :: NMap map1 k v1 sort1 => NMap map2 k v2 sort2 => (k -> v1 -> Maybe v2) -> map1 -> map2
+ Hix.Class.Map: nMapMaybeWithKey :: (NMap map1 k v1 sort1, NMap map2 k v2 sort2) => (k -> v1 -> Maybe v2) -> map1 -> map2
- Hix.Class.Map: nMapMaybeWithKey1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (k' -> v1 -> Maybe v2) -> map1 -> map2
+ Hix.Class.Map: nMapMaybeWithKey1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (k' -> v1 -> Maybe v2) -> map1 -> map2
- Hix.Class.Map: nMapWithKey :: NMap map1 k v1 sort1 => NMap map2 k v2 sort2 => (k -> v1 -> v2) -> map1 -> map2
+ Hix.Class.Map: nMapWithKey :: (NMap map1 k v1 sort1, NMap map2 k v2 sort2) => (k -> v1 -> v2) -> map1 -> map2
- Hix.Class.Map: nMapWithKey1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (k -> k' -> v1 -> v2) -> map1 -> map2
+ Hix.Class.Map: nMapWithKey1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (k -> k' -> v1 -> v2) -> map1 -> map2
- Hix.Class.Map: nMerge :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => SimpleWhenMissing k v1 v3 -> SimpleWhenMissing k v2 v3 -> SimpleWhenMatched k v1 v2 v3 -> map1 -> map2 -> map3
+ Hix.Class.Map: nMerge :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. (NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => SimpleWhenMissing k v1 v3 -> SimpleWhenMissing k v2 v3 -> SimpleWhenMatched k v1 v2 v3 -> map1 -> map2 -> map3
- Hix.Class.Map: nMergeA :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3 m. Applicative m => NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => WhenMissing m k v1 v3 -> WhenMissing m k v2 v3 -> WhenMatched m k v1 v2 v3 -> map1 -> map2 -> m map3
+ Hix.Class.Map: nMergeA :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3 m. (Applicative m, NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => WhenMissing m k v1 v3 -> WhenMissing m k v2 v3 -> WhenMatched m k v1 v2 v3 -> map1 -> map2 -> m map3
- Hix.Class.Map: nPad :: forall map1 map2 k v1 v2 s1 s2. NMap map1 k v1 s1 => NMap map2 k v2 s2 => (v1 -> v2 -> v2) -> (v1 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nPad :: forall map1 map2 k v1 v2 s1 s2. (NMap map1 k v1 s1, NMap map2 k v2 s2) => (v1 -> v2 -> v2) -> (v1 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nPad1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (v1 -> v2 -> v2) -> (v1 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nPad1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (v1 -> v2 -> v2) -> (v1 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nPadKeep :: forall map1 map2 k v1 v2 s1 s2. NMap map1 k v1 s1 => NMap map2 k v2 s2 => (v1 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nPadKeep :: forall map1 map2 k v1 v2 s1 s2. (NMap map1 k v1 s1, NMap map2 k v2 s2) => (v1 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nPadKeep1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. NMap map1 k map1' s1 => NMap map2 k map2' s2 => NMap map1' k' v1 s1' => NMap map2' k' v2 s2' => (v1 -> v2) -> map1 -> map2 -> map2
+ Hix.Class.Map: nPadKeep1 :: forall map1 map2 map1' map2' k k' v1 v2 s1 s2 s1' s2'. (NMap map1 k map1' s1, NMap map2 k map2' s2, NMap map1' k' v1 s1', NMap map2' k' v2 s2') => (v1 -> v2) -> map1 -> map2 -> map2
- Hix.Class.Map: nPretty :: Pretty k => Pretty v => NMap map k v sort => map -> Doc
+ Hix.Class.Map: nPretty :: (Pretty k, Pretty v, NMap map k v sort) => map -> Doc
- Hix.Class.Map: nPretty1 :: Pretty k => Pretty v => NMap map k v sort => map -> Doc
+ Hix.Class.Map: nPretty1 :: (Pretty k, Pretty v, NMap map k v sort) => map -> Doc
- Hix.Class.Map: nPrettyWith :: Pretty k => NMap map k v sort => (v -> Doc) -> map -> Doc
+ Hix.Class.Map: nPrettyWith :: (Pretty k, NMap map k v sort) => (v -> Doc) -> map -> Doc
- Hix.Class.Map: nTo1 :: forall map1 map2 k1 k2 v s1 s2 a. NMap map1 k1 map2 s1 => NMap map2 k2 v s2 => map1 -> (k1 -> k2 -> v -> a) -> [a]
+ Hix.Class.Map: nTo1 :: forall map1 map2 k1 k2 v s1 s2 a. (NMap map1 k1 map2 s1, NMap map2 k2 v s2) => map1 -> (k1 -> k2 -> v -> a) -> [a]
- Hix.Class.Map: nToWith1 :: forall map1 map2 k1 k2 v s1 s2 a. NMap map1 k1 map2 s1 => NMap map2 k2 v s2 => (k1 -> k2 -> v -> a) -> map1 -> [a]
+ Hix.Class.Map: nToWith1 :: forall map1 map2 k1 k2 v s1 s2 a. (NMap map1 k1 map2 s1, NMap map2 k2 v s2) => (k1 -> k2 -> v -> a) -> map1 -> [a]
- Hix.Class.Map: nTransform :: NMap map1 k1 v1 sort1 => NMap map2 k2 v2 sort2 => (k1 -> v1 -> (k2, v2)) -> map1 -> map2
+ Hix.Class.Map: nTransform :: (NMap map1 k1 v1 sort1, NMap map2 k2 v2 sort2) => (k1 -> v1 -> (k2, v2)) -> map1 -> map2
- Hix.Class.Map: nTransformMaybe :: NMap map1 k1 v1 sort1 => NMap map2 k2 v2 sort2 => (k1 -> v1 -> Maybe (k2, v2)) -> map1 -> map2
+ Hix.Class.Map: nTransformMaybe :: (NMap map1 k1 v1 sort1, NMap map2 k2 v2 sort2) => (k1 -> v1 -> Maybe (k2, v2)) -> map1 -> map2
- Hix.Class.Map: nUpdate :: forall map k v sort l. NMap map k v sort => NLookup sort k v l => k -> map -> (l -> v) -> map
+ Hix.Class.Map: nUpdate :: (NMap map k v sort, NLookup sort k v l) => k -> map -> (l -> v) -> map
- Hix.Class.Map: nUpdateWith :: forall map k v sort l. NMap map k v sort => NLookup sort k v l => k -> (l -> v) -> map -> map
+ Hix.Class.Map: nUpdateWith :: (NMap map k v sort, NLookup sort k v l) => k -> (l -> v) -> map -> map
- Hix.Class.Map: nVia :: NMap map1 k1 v1 s1 => NMap map2 k2 v2 s2 => (Map k1 v1 -> Map k2 v2) -> map1 -> map2
+ Hix.Class.Map: nVia :: (NMap map1 k1 v1 s1, NMap map2 k2 v2 s2) => (Map k1 v1 -> Map k2 v2) -> map1 -> map2
- Hix.Class.Map: nViaA :: Applicative m => NMap map1 k1 v1 s1 => NMap map2 k2 v2 s2 => (Map k1 v1 -> m (Map k2 v2)) -> map1 -> m map2
+ Hix.Class.Map: nViaA :: (Applicative m, NMap map1 k1 v1 s1, NMap map2 k2 v2 s2) => (Map k1 v1 -> m (Map k2 v2)) -> map1 -> m map2
- Hix.Class.Map: nZip :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => (v1 -> v2 -> v3) -> map1 -> map2 -> map3
+ Hix.Class.Map: nZip :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. (NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => (v1 -> v2 -> v3) -> map1 -> map2 -> map3
- Hix.Class.Map: nZipR :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => (Maybe v1 -> v2 -> v3) -> map1 -> map2 -> map3
+ Hix.Class.Map: nZipR :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. (NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => (Maybe v1 -> v2 -> v3) -> map1 -> map2 -> map3
- Hix.Class.Map: nZipWithKey :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => (k -> v1 -> v2 -> v3) -> map1 -> map2 -> map3
+ Hix.Class.Map: nZipWithKey :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. (NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => (k -> v1 -> v2 -> v3) -> map1 -> map2 -> map3
- Hix.Class.Map: nZipWithKeyR :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. NMap map1 k v1 s1 => NMap map2 k v2 s2 => NMap map3 k v3 s3 => (k -> Maybe v1 -> v2 -> v3) -> map1 -> map2 -> map3
+ Hix.Class.Map: nZipWithKeyR :: forall map1 map2 map3 k v1 v2 v3 s1 s2 s3. (NMap map1 k v1 s1, NMap map2 k v2 s2, NMap map3 k v3 s3) => (k -> Maybe v1 -> v2 -> v3) -> map1 -> map2 -> map3
- Hix.Class.SOP: [Field] :: a -> Field ('FieldK name a)
+ Hix.Class.SOP: [Field] :: forall a (name :: Symbol). a -> Field ('FieldK name a)
- Hix.Class.SOP: class ProdFields info as fields | info as -> fields
+ Hix.Class.SOP: class ProdFields (info :: [FieldInfo]) (as :: [Type]) (fields :: [FieldK]) | info as -> fields
- Hix.Class.SOP: class SumFields cons ass fields | cons ass -> fields
+ Hix.Class.SOP: class SumFields (cons :: [ConstructorInfo]) (ass :: [[Type]]) (fields :: [[FieldK]]) | cons ass -> fields
- Hix.Class.SOP: class ToFields a fields | a -> fields
+ Hix.Class.SOP: class ToFields a (fields :: [[FieldK]]) | a -> fields
- Hix.Class.SOP: data Field k
+ Hix.Class.SOP: data Field (k :: FieldK)
- Hix.Data.Json: foldMissing :: Monoid a => FromJSON a => Object -> Key -> Parser a
+ Hix.Data.Json: foldMissing :: (Monoid a, FromJSON a) => Object -> Key -> Parser a
- Hix.Data.Version: data () => Version
+ Hix.Data.Version: data Version
- Hix.Data.Version: data () => VersionRange
+ Hix.Data.Version: data VersionRange
- Hix.Error: catchIO :: (Text -> ExceptT Error IO a) -> IO a -> ExceptT Error IO a
+ Hix.Error: catchIO :: (Text -> ExceptT e IO a) -> IO a -> ExceptT e IO a
- Hix.Error: tryIOWith :: (Text -> Error) -> IO a -> ExceptT Error IO a
+ Hix.Error: tryIOWith :: (Text -> e) -> IO a -> ExceptT e IO a
- Hix.Managed.Build: buildConstraints :: EnvBuilder -> EnvContext -> Text -> SolverState -> M (Maybe (Versions, Overrides, BuildStatus))
+ Hix.Managed.Build: buildConstraints :: EnvBuilder -> EnvContext -> Text -> Bool -> Set PackageId -> SolverState -> M (Maybe (Versions, Overrides, Set PackageId, BuildStatus))
- Hix.Managed.Build: buildMutation :: EnvBuilder -> EnvContext -> MutationState -> BuildMutation -> M (Maybe MutationState)
+ Hix.Managed.Build: buildMutation :: EnvBuilder -> EnvContext -> MutationState -> Set PackageId -> BuildMutation -> M (Maybe (MutationState, Set PackageId))
- Hix.Managed.Build: buildVersions :: EnvBuilder -> EnvContext -> Text -> Versions -> [PackageId] -> M (Overrides, BuildStatus)
+ Hix.Managed.Build: buildVersions :: EnvBuilder -> EnvContext -> Text -> Bool -> Versions -> [PackageId] -> M (Overrides, Set PackageId, BuildStatus)
- Hix.Managed.Build.Mutation: buildCandidate :: (BuildMutation -> M (Maybe MutationState)) -> (Version -> VersionBounds -> VersionBounds) -> (MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> MutableDep -> Version -> M (Maybe (MutableId, SolverState, MutationState))
+ Hix.Managed.Build.Mutation: buildCandidate :: (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> (Version -> VersionBounds -> VersionBounds) -> (MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> MutableDep -> Version -> M (Maybe (MutableId, SolverState, MutationState, Set PackageId))
- Hix.Managed.Build.Solve: processSolverPlan :: EnvDeps -> SolverPlan -> M SolverChanges
+ Hix.Managed.Build.Solve: processSolverPlan :: Bool -> CabalHandlers -> EnvDeps -> Set PackageId -> SolverPlan -> M SolverChanges
- Hix.Managed.Build.Solve: solveMutation :: CabalHandlers -> EnvDeps -> SolverState -> M (Maybe SolverChanges)
+ Hix.Managed.Build.Solve: solveMutation :: CabalHandlers -> EnvDeps -> Set PackageId -> SolverState -> M (Maybe SolverChanges)
- Hix.Managed.Cabal.Data.SolverState: SolverFlags :: Bool -> SolverFlags
+ Hix.Managed.Cabal.Data.SolverState: SolverFlags :: Bool -> Bool -> SolverFlags
- Hix.Managed.Cabal.Data.SourcePackage: SourcePackages :: Map PackageName SourcePackageDeps -> SourcePackages
+ Hix.Managed.Cabal.Data.SourcePackage: SourcePackages :: Map PackageName SourcePackage -> SourcePackages
- Hix.Managed.Cabal.Mock.SourcePackage: allDep :: Dep -> SourcePackageDeps -> SourcePackageDeps
+ Hix.Managed.Cabal.Mock.SourcePackage: allDep :: Dep -> SourcePackage -> SourcePackage
- Hix.Managed.Cabal.Mock.SourcePackage: allDeps :: [Dep] -> SourcePackageDeps -> SourcePackageDeps
+ Hix.Managed.Cabal.Mock.SourcePackage: allDeps :: [Dep] -> SourcePackage -> SourcePackage
- Hix.Managed.Cabal.Mock.SourcePackage: mockSourcePackage :: PackageName -> Version -> [Dep] -> UnresolvedSourcePackage
+ Hix.Managed.Cabal.Mock.SourcePackage: mockSourcePackage :: PackageName -> Version -> SourcePackageId -> UnresolvedSourcePackage
- Hix.Managed.Cabal.Sort: sortDeps :: forall a. SolveResources -> (a -> PackageName) -> [a] -> M [a]
+ Hix.Managed.Cabal.Sort: sortDeps :: SolveResources -> (a -> PackageName) -> [a] -> M [a]
- Hix.Managed.Cabal.Sort: sortMutations :: forall a. SolveResources -> [DepMutation a] -> M [DepMutation a]
+ Hix.Managed.Cabal.Sort: sortMutations :: SolveResources -> [DepMutation a] -> M [DepMutation a]
- Hix.Managed.Data.BuildConfig: BuildConfig :: Natural -> Natural -> Natural -> Bool -> Bool -> Bool -> Bool -> Maybe BuildTimeout -> BuildConfig
+ Hix.Managed.Data.BuildConfig: BuildConfig :: Natural -> Natural -> Natural -> Bool -> Bool -> Bool -> Bool -> Maybe BuildTimeout -> Bool -> BuildConfig
- Hix.Managed.Data.Mutable: mutLookup :: NMap map MutableDep v sort => NLookup sort MutableDep v l => PackageName -> map -> l
+ Hix.Managed.Data.Mutable: mutLookup :: (NMap map MutableDep v sort, NLookup sort MutableDep v l) => PackageName -> map -> l
- Hix.Managed.Data.Mutable: mutRelax :: NMap map1 MutableDep v s1 => NMap map2 PackageName v s2 => map1 -> map2
+ Hix.Managed.Data.Mutable: mutRelax :: (NMap map1 MutableDep v s1, NMap map2 PackageName v s2) => map1 -> map2
- Hix.Managed.Data.Mutable: mutReplacePartial :: forall map1 map2 v1 s1 s2. NMap map1 PackageName v1 s1 => NMap map2 MutableDep v1 s2 => map1 -> map2 -> map2
+ Hix.Managed.Data.Mutable: mutReplacePartial :: forall map1 map2 v1 s1 s2. (NMap map1 PackageName v1 s1, NMap map2 MutableDep v1 s2) => map1 -> map2 -> map2
- Hix.Managed.Data.Mutable: mutUpdate :: NMap map1 MutableDep v1 s1 => NMap map2 MutableDep v2 s2 => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
+ Hix.Managed.Data.Mutable: mutUpdate :: (NMap map1 MutableDep v1 s1, NMap map2 MutableDep v2 s2) => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
- Hix.Managed.Data.Mutable: mutUpdatePartial :: forall map1 map2 v1 v2 s1 s2. NMap map1 PackageName v1 s1 => NMap map2 MutableDep v2 s2 => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
+ Hix.Managed.Data.Mutable: mutUpdatePartial :: forall map1 map2 v1 v2 s1 s2. (NMap map1 PackageName v1 s1, NMap map2 MutableDep v2 s2) => (v1 -> v2 -> v2) -> map1 -> map2 -> map2
- Hix.Managed.Data.Mutable: mutUpdateTargets :: NMap map1 MutableDep v1 s1 => NMap map2 MutableDep v2 s2 => Targets -> (v1 -> v2 -> v2) -> map1 -> Packages map2 -> Packages map2
+ Hix.Managed.Data.Mutable: mutUpdateTargets :: (NMap map1 MutableDep v1 s1, NMap map2 MutableDep v2 s2) => Targets -> (v1 -> v2 -> v2) -> map1 -> Packages map2 -> Packages map2
- Hix.Managed.Data.Mutation: MutationSuccess :: MutableId -> Bool -> MutationState -> s -> MutationResult s
+ Hix.Managed.Data.Mutation: MutationSuccess :: MutableId -> Bool -> MutationState -> Set PackageId -> s -> MutationResult s
- Hix.Managed.Data.StageState: StageState :: Map MutableDep BuildSuccess -> [DepMutation a] -> MutationState -> Natural -> s -> StageState a s
+ Hix.Managed.Data.StageState: StageState :: Map MutableDep BuildSuccess -> [DepMutation a] -> MutationState -> Set PackageId -> Natural -> s -> StageState a s
- Hix.Managed.Diff: initChanges :: NMap map1 k (Maybe v1) s1 => NMap map2 k (Change d v1) s2 => map1 -> map2
+ Hix.Managed.Diff: initChanges :: (NMap map1 k (Maybe v1) s1, NMap map2 k (Change d v1) s2) => map1 -> map2
- Hix.Managed.Diff: updateBoundsChanges :: NMap vmap MutableDep VersionBounds s1 => NMap map MutableDep BoundsChange s2 => vmap -> map -> map
+ Hix.Managed.Diff: updateBoundsChanges :: (NMap vmap MutableDep VersionBounds s1, NMap map MutableDep BoundsChange s2) => vmap -> map -> map
- Hix.Managed.Diff: updateVersionChanges :: NMap vmap MutableDep (Maybe Version) s1 => NMap map MutableDep VersionChange s2 => vmap -> map -> map
+ Hix.Managed.Diff: updateVersionChanges :: (NMap vmap MutableDep (Maybe Version) s1, NMap map MutableDep VersionChange s2) => vmap -> map -> map
- Hix.Managed.Flow: runStage :: forall o. Text -> (StageContext -> M (StageResult, o)) -> Flow (BuildStatus, o)
+ Hix.Managed.Flow: runStage :: Text -> (StageContext -> M (StageResult, o)) -> Flow (BuildStatus, o)
- Hix.Managed.Handlers.Build: BuildHandlers :: StateFileHandlers -> ReportHandlers -> (Packages ManagedPackage -> GhcDb -> M CabalHandlers) -> (forall a. (Builder -> M a) -> M a) -> (PackageName -> M [Version]) -> (PackageName -> M (Maybe Version)) -> BuildHandlers
+ Hix.Managed.Handlers.Build: BuildHandlers :: StateFileHandlers -> ReportHandlers -> (Packages ManagedPackage -> GhcDb -> M CabalHandlers) -> (forall a. () => (Builder -> M a) -> M a) -> (PackageName -> M [Version]) -> (PackageName -> M (Maybe Version)) -> BuildHandlers
- Hix.Managed.Handlers.Build: Builder :: (forall a. CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a) -> Builder
+ Hix.Managed.Handlers.Build: Builder :: (forall a. () => CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a) -> Builder
- Hix.Managed.Handlers.Build: EnvBuilder :: CabalHandlers -> (Versions -> [PackageId] -> M (Overrides, BuildResult)) -> EnvBuilder
+ Hix.Managed.Handlers.Build: EnvBuilder :: CabalHandlers -> (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> EnvBuilder
- Hix.Managed.Handlers.Build: testBuilder :: (Versions -> [PackageId] -> M (Overrides, BuildResult)) -> (Builder -> M a) -> M a
+ Hix.Managed.Handlers.Build: testBuilder :: (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) -> (Builder -> M a) -> M a
- Hix.Managed.Handlers.Build.Prod: BuilderResources :: HackageHandlers -> StateFileHandlers -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Path Abs Dir -> Maybe BuildTimeout -> BuilderResources
+ Hix.Managed.Handlers.Build.Prod: BuilderResources :: HackageHandlers -> StateFileHandlers -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Path Abs Dir -> BuildConfig -> BuilderResources
- Hix.Managed.Handlers.Build.Prod: buildWithState :: EnvBuilderResources -> Versions -> [PackageId] -> M (Overrides, BuildResult)
+ Hix.Managed.Handlers.Build.Prod: buildWithState :: EnvBuilderResources -> Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))
- Hix.Managed.Handlers.Build.Prod: handlersProd :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Maybe BuildTimeout -> CabalConfig -> Bool -> m BuildHandlers
+ Hix.Managed.Handlers.Build.Prod: handlersProd :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> BuildConfig -> CabalConfig -> Bool -> m BuildHandlers
- Hix.Managed.Handlers.Build.Prod: nixProc :: Path Abs Dir -> [Text] -> Text -> [Text] -> M (ProcessConfig () () ())
+ Hix.Managed.Handlers.Build.Prod: nixProc :: OutputConfig -> Path Abs Dir -> [Text] -> Text -> [Text] -> M (ProcessConfig () () (Maybe Handle))
- Hix.Managed.Handlers.Build.Prod: withBuilder :: HackageHandlers -> StateFileHandlers -> StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Maybe BuildTimeout -> (Builder -> M a) -> M a
+ Hix.Managed.Handlers.Build.Prod: withBuilder :: HackageHandlers -> StateFileHandlers -> StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> BuildConfig -> (Builder -> M a) -> M a
- Hix.Managed.Handlers.Build.Prod: withEnvBuilder :: forall a. BuilderResources -> CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a
+ Hix.Managed.Handlers.Build.Prod: withEnvBuilder :: BuilderResources -> CabalHandlers -> EnvContext -> Initial EnvState -> (EnvBuilder -> M a) -> M a
- Hix.Managed.Handlers.Build.Test: chooseHandlers :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Maybe BuildTimeout -> CabalConfig -> Maybe SpecialBuildHandlers -> m BuildHandlers
+ Hix.Managed.Handlers.Build.Test: chooseHandlers :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> BuildConfig -> CabalConfig -> Maybe SpecialBuildHandlers -> m BuildHandlers
- Hix.Managed.Handlers.Build.Test: handlersBumpTest :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> Maybe BuildTimeout -> CabalConfig -> Bool -> m BuildHandlers
+ Hix.Managed.Handlers.Build.Test: handlersBumpTest :: MonadIO m => StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix -> BuildConfig -> CabalConfig -> Bool -> m BuildHandlers
- Hix.Managed.Handlers.Cabal: CabalHandlers :: (SolverState -> M (Maybe SolverPlan)) -> (PackageName -> Maybe Version) -> (forall a. [DepMutation a] -> M [DepMutation a]) -> CabalHandlers
+ Hix.Managed.Handlers.Cabal: CabalHandlers :: (SolverState -> M (Maybe SolverPlan)) -> (PackageName -> Maybe Version) -> (PackageId -> Maybe PackageDescription) -> (forall a. () => [DepMutation a] -> M [DepMutation a]) -> CabalHandlers
- Hix.Managed.Handlers.Mutation: MutationHandlers :: (s -> DepMutation a -> (BuildMutation -> M (Maybe MutationState)) -> M (MutationResult s)) -> MutationHandlers a s
+ Hix.Managed.Handlers.Mutation: MutationHandlers :: (s -> DepMutation a -> (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult s)) -> MutationHandlers a s
- Hix.Managed.Handlers.Mutation.Bump: processMutationBump :: SolverState -> DepMutation Bump -> (BuildMutation -> M (Maybe MutationState)) -> M (MutationResult SolverState)
+ Hix.Managed.Handlers.Mutation.Bump: processMutationBump :: SolverState -> DepMutation Bump -> (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult SolverState)
- Hix.Managed.Handlers.Mutation.Lower: processMutationLower :: BuildConfig -> LowerMode -> (Bool -> MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> DepMutation Lower -> (BuildMutation -> M (Maybe MutationState)) -> M (MutationResult SolverState)
+ Hix.Managed.Handlers.Mutation.Lower: processMutationLower :: BuildConfig -> LowerMode -> (Bool -> MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> DepMutation Lower -> (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult SolverState)
- Hix.Managed.ProjectStateProto: invalidDep :: forall a b. LocalPackage -> PackageName -> a -> M (Maybe b)
+ Hix.Managed.ProjectStateProto: invalidDep :: LocalPackage -> PackageName -> a -> M (Maybe b)
- Hix.Managed.Report: plural :: Eq a => Num a => a -> Text
+ Hix.Managed.Report: plural :: (Eq a, Num a) => a -> Text
- Hix.Monad: mapAccumM :: Traversable t => Monad m => (s -> a -> m (s, b)) -> s -> t a -> m (s, t b)
+ Hix.Monad: mapAccumM :: (Traversable t, Monad m) => (s -> a -> m (s, b)) -> s -> t a -> m (s, t b)
- Hix.Monad: withLower :: (forall b. (M a -> IO b) -> IO b) -> M a
+ Hix.Monad: withLower :: (forall b. () => (M a -> IO b) -> IO b) -> M a
- Hix.NixExpr: multiOrSingle :: forall a e. EncodeNix a => Text -> (e -> [a]) -> e -> ExprAttr
+ Hix.NixExpr: multiOrSingle :: EncodeNix a => Text -> (e -> [a]) -> e -> ExprAttr
- Hix.Pretty: prettyL :: forall t a. Pretty a => Foldable t => t a -> Doc
+ Hix.Pretty: prettyL :: forall t a. (Pretty a, Foldable t) => t a -> Doc
- Hix.Pretty: showP :: forall b a. Pretty a => IsString b => a -> b
+ Hix.Pretty: showP :: forall b a. (Pretty a, IsString b) => a -> b
- Hix.Pretty: showPL :: forall t b a. Pretty a => Foldable t => IsString b => t a -> b
+ Hix.Pretty: showPL :: forall t b a. (Pretty a, Foldable t, IsString b) => t a -> b
- Hix.Pretty: showPM :: forall b a. Pretty a => IsString b => Maybe a -> b
+ Hix.Pretty: showPM :: forall b a. (Pretty a, IsString b) => Maybe a -> b
- Hix.Trace: trp :: forall b a. Pretty b => HasCallStack => b -> a -> a
+ Hix.Trace: trp :: (Pretty b, HasCallStack) => b -> a -> a
- Hix.Trace: trpi :: Pretty a => HasCallStack => a -> a
+ Hix.Trace: trpi :: (Pretty a, HasCallStack) => a -> a
- Hix.Zip: zipApplyA :: Traversable t => Applicative m => (a -> m b) -> t a -> m (t (a, b))
+ Hix.Zip: zipApplyA :: (Traversable t, Applicative m) => (a -> m b) -> t a -> m (t (a, b))
Files
- hix.cabal +7/−3
- lib/Hix/Class/Map.hs +8/−0
- lib/Hix/Data/Json.hs +11/−0
- lib/Hix/Data/PackageId.hs +1/−1
- lib/Hix/Error.hs +4/−4
- lib/Hix/Managed/Build.hs +50/−32
- lib/Hix/Managed/Build/Mutation.hs +3/−3
- lib/Hix/Managed/Build/NixOutput.hs +226/−0
- lib/Hix/Managed/Build/NixOutput/Analysis.hs +16/−0
- lib/Hix/Managed/Build/Single.hs +4/−2
- lib/Hix/Managed/Build/Solve.hs +38/−9
- lib/Hix/Managed/Bump/App.hs +1/−3
- lib/Hix/Managed/Bump/Optimize.hs +1/−1
- lib/Hix/Managed/Cabal/Data/SolverState.hs +3/−2
- lib/Hix/Managed/Cabal/Data/SourcePackage.hs +19/−8
- lib/Hix/Managed/Cabal/Mock/SourcePackage.hs +18/−13
- lib/Hix/Managed/Cabal/Solve.hs +11/−4
- lib/Hix/Managed/Cabal/Source.hs +20/−0
- lib/Hix/Managed/Data/BuildConfig.hs +4/−2
- lib/Hix/Managed/Data/Mutation.hs +8/−1
- lib/Hix/Managed/Data/StageState.hs +23/−8
- lib/Hix/Managed/Handlers/Build.hs +9/−6
- lib/Hix/Managed/Handlers/Build/Prod.hs +178/−46
- lib/Hix/Managed/Handlers/Build/Test.hs +8/−8
- lib/Hix/Managed/Handlers/Cabal.hs +4/−0
- lib/Hix/Managed/Handlers/Cabal/Prod.hs +6/−2
- lib/Hix/Managed/Handlers/Hackage/Prod.hs +10/−3
- lib/Hix/Managed/Handlers/Mutation.hs +2/−1
- lib/Hix/Managed/Handlers/Mutation/Bump.hs +3/−3
- lib/Hix/Managed/Handlers/Mutation/Lower.hs +3/−3
- lib/Hix/Managed/Handlers/StateFile/Test.hs +1/−1
- lib/Hix/Managed/Lower/App.hs +2/−3
- lib/Hix/Managed/Lower/Auto.hs +1/−1
- lib/Hix/Managed/StageState.hs +3/−1
- lib/Hix/Managed/StateFile.hs +1/−1
- lib/Hix/Monad.hs +6/−2
- lib/Hix/Options.hs +1/−0
- test/Hix/Test/Hedgehog.hs +17/−5
- test/Hix/Test/Managed/Bump/MutationTest.hs +100/−48
- test/Hix/Test/Managed/BumpNativeTest.hs +135/−0
- test/Hix/Test/Managed/LowerAuto/MutationOptimizeTest.hs +4/−4
- test/Hix/Test/Managed/LowerAuto/MutationStabilizeTest.hs +4/−4
- test/Hix/Test/Managed/LowerInit/MutationTest.hs +5/−5
- test/Hix/Test/Managed/LowerNativeTest.hs +3/−2
- test/Hix/Test/Managed/LowerOptimize/CandidatesTest.hs +7/−4
- test/Hix/Test/Managed/LowerOptimize/MutationTest.hs +3/−3
- test/Hix/Test/Managed/LowerOptimize/OrderTest.hs +3/−3
- test/Hix/Test/Managed/LowerStabilize/MutationTest.hs +3/−3
- test/Hix/Test/Managed/Run.hs +3/−2
- test/Hix/Test/Managed/SolveTest.hs +12/−6
- test/Hix/Test/Managed/UnsafeIsString.hs +8/−0
hix.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: hix-version: 0.7.1+version: 0.7.2 synopsis: Haskell/Nix development build tools description: See https://hackage.haskell.org/package/hix/docs/Hix.html category: Build@@ -65,6 +65,8 @@ Hix.Log Hix.Managed.Build Hix.Managed.Build.Mutation+ Hix.Managed.Build.NixOutput+ Hix.Managed.Build.NixOutput.Analysis Hix.Managed.Build.Single Hix.Managed.Build.Solve Hix.Managed.BuildOutput@@ -91,6 +93,7 @@ Hix.Managed.Cabal.Resources Hix.Managed.Cabal.Solve Hix.Managed.Cabal.Sort+ Hix.Managed.Cabal.Source Hix.Managed.Cabal.Targets Hix.Managed.Constraints Hix.Managed.Data.BuildConfig@@ -231,7 +234,7 @@ ghc-options: -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages build-depends: Cabal- , aeson >=2.0 && <2.2+ , aeson >=2.0 && <2.3 , base ==4.* , bytestring , cabal-install@@ -331,6 +334,7 @@ Hix.Test.Managed.BuildOutputTest Hix.Test.Managed.Bump.CandidatesTest Hix.Test.Managed.Bump.MutationTest+ Hix.Test.Managed.BumpNativeTest Hix.Test.Managed.DiffTest Hix.Test.Managed.LowerAuto.MutationOptimizeTest Hix.Test.Managed.LowerAuto.MutationStabilizeTest@@ -391,7 +395,7 @@ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages build-depends: Cabal- , aeson >=2.0 && <2.2+ , aeson >=2.0 && <2.3 , base ==4.* , exon >=1.4 && <1.7 , extra ==1.7.*
lib/Hix/Class/Map.hs view
@@ -713,3 +713,11 @@ map nWithoutKeys keys = nVia (`Map.withoutKeys` keys)++nMember ::+ NMap map k v sort =>+ k ->+ map ->+ Bool+nMember k =+ Map.member k . nGet
lib/Hix/Data/Json.hs view
@@ -31,3 +31,14 @@ Parser a foldMissing o k = fold <$> o .:? k++newtype JsonEither a b =+ JsonEither (Either a b)+ deriving stock (Eq, Show)++jsonEither :: JsonEither a b -> Either a b+jsonEither = coerce++instance (FromJSON a, FromJSON b) => FromJSON (JsonEither a b) where+ parseJSON v =+ JsonEither <$> ((Right <$> parseJSON v) <|> (Left <$> parseJSON v))
lib/Hix/Data/PackageId.hs view
@@ -14,7 +14,7 @@ name :: PackageName, version :: Version }- deriving stock (Eq, Show, Generic)+ deriving stock (Eq, Show, Ord, Generic) renderPackage :: PackageId -> Text renderPackage PackageId {..} =
lib/Hix/Error.hs view
@@ -71,18 +71,18 @@ [exon|#{reason} the source file '#{pathText source}'|] catchIO ::- (Text -> ExceptT Error IO a) ->+ (Text -> ExceptT e IO a) -> IO a ->- ExceptT Error IO a+ ExceptT e IO a catchIO handleError ma = liftIO (tryIOError ma) >>= \case Right a -> pure a Left err -> handleError (show err) tryIOWith ::- (Text -> Error) ->+ (Text -> e) -> IO a ->- ExceptT Error IO a+ ExceptT e IO a tryIOWith mkErr ma = liftIO (tryIOError ma) >>= \case Right a -> pure a
lib/Hix/Managed/Build.hs view
@@ -2,17 +2,22 @@ import Control.Monad (foldM) import qualified Data.Map.Strict as Map+import qualified Data.Text as Text import Distribution.Pretty (Pretty) import Exon (exon) import Text.PrettyPrint (vcat) -import Hix.Data.EnvName (EnvName)+import qualified Hix.Console+import Hix.Console (color, colors)+import Hix.Data.EnvName (EnvName (EnvName)) import Hix.Data.Monad (M) import Hix.Data.Overrides (Overrides)+import qualified Hix.Data.PackageId import Hix.Data.PackageId (PackageId) import Hix.Data.Version (Version, Versions) import Hix.Data.VersionBounds (VersionBounds) import qualified Hix.Log as Log+import Hix.Managed.Build.NixOutput (PackageDerivation (..)) import Hix.Managed.Build.Solve (solveMutation) import qualified Hix.Managed.Cabal.Changes import Hix.Managed.Cabal.Config (isNonReinstallableDep, isReinstallableId)@@ -33,13 +38,12 @@ import Hix.Managed.Data.StageContext (StageContext (StageContext)) import qualified Hix.Managed.Data.StageState import Hix.Managed.Data.StageState (- BuildResult (Finished, TimedOut),- BuildStatus (Failure, Success),- StageState,+ BuildFailure (PackageFailure, TimeoutFailure),+ BuildResult (BuildFailure, BuildSuccess),+ BuildStatus,+ StageState (failed, iterations), buildStatus,- failed, initStageState,- iterations, justSuccess, ) import qualified Hix.Managed.Handlers.Build@@ -57,18 +61,28 @@ [PackageId] -> M () logBuildInputs env description overrides = do- Log.info [exon|Building targets in '##{env}' with #{description}...|]+ Log.info [exon|Building targets in #{color colors.yellow (coerce env)} with #{description}...|] Log.debugP (vcat ["Overrides:", prettyL overrides]) logBuildResult :: Text -> BuildResult -> M () logBuildResult description result =- Log.info [exon|Build with ##{description} #{describeResult result}|]+ Log.info [exon|Build with ##{description} #{describeResult result}#{describePackages result}|] where describeResult = \case- Finished Success -> "succeeded"- Finished Failure -> "failed"- TimedOut -> "timed out"+ BuildSuccess -> "succeeded"+ BuildFailure (TimeoutFailure _) -> "timed out"+ BuildFailure _ -> "failed" + describePackages = \case+ BuildFailure (TimeoutFailure pkgs) | not (null pkgs) -> packageFragment pkgs+ BuildFailure (PackageFailure pkgs) -> packageFragment ((.package) <$> toList pkgs)+ _ -> ""++ packageFragment pkgs =+ [exon| in #{names}|]+ where+ names = Text.intercalate ", " (color colors.blue . showP . (.name) <$> pkgs)+ updateMutationState :: (Version -> VersionBounds -> VersionBounds) -> Versions ->@@ -84,20 +98,19 @@ } -- | /Note/: This quietly discards non-reinstallable packages.------ TODO Discard installed versions, for builds with initial versions. buildVersions :: EnvBuilder -> EnvContext -> Text ->+ Bool -> Versions -> [PackageId] ->- M (Overrides, BuildStatus)-buildVersions builder context description versions overrideVersions = do+ M (Overrides, Set PackageId, BuildStatus)+buildVersions builder context description allowRevisions versions overrideVersions = do logBuildInputs context.env description reinstallable- (overrides, status) <- builder.buildWithState versions reinstallable- logBuildResult description status- pure (overrides, buildStatus status)+ (result, (overrides, revisions)) <- builder.buildWithState allowRevisions versions reinstallable+ logBuildResult description result+ pure (overrides, revisions, buildStatus result) where reinstallable = filter isReinstallableId overrideVersions @@ -105,25 +118,30 @@ EnvBuilder -> EnvContext -> Text ->+ Bool ->+ Set PackageId -> SolverState ->- M (Maybe (Versions, Overrides, BuildStatus))-buildConstraints builder context description state =- solveMutation builder.cabal context.deps state >>= traverse \ changes -> do- (overrides, status) <- buildVersions builder context description changes.versions changes.overrides- pure (changes.versions, overrides, status)+ M (Maybe (Versions, Overrides, Set PackageId, BuildStatus))+buildConstraints builder context description allowRevisions prevRevisions state =+ solveMutation builder.cabal context.deps prevRevisions state >>= traverse \ changes -> do+ (overrides, revisions, status) <-+ buildVersions builder context description allowRevisions changes.versions changes.overrides+ pure (changes.versions, overrides, prevRevisions <> revisions, status) buildMutation :: EnvBuilder -> EnvContext -> MutationState ->+ Set PackageId -> BuildMutation ->- M (Maybe MutationState)-buildMutation builder context state BuildMutation {description, solverState, updateBound} =- result <$> buildConstraints builder context description solverState+ M (Maybe (MutationState, Set PackageId))+buildMutation builder context state prevRevisions BuildMutation {description, solverState, updateBound} =+ result <$> buildConstraints builder context description True prevRevisions solverState where result = \case- Just (versions, overrides, status) ->- justSuccess (updateMutationState updateBound versions overrides state) status+ Just (versions, overrides, revisions, status) -> do+ new <- justSuccess (updateMutationState updateBound versions overrides state) status+ pure (new, revisions) Nothing -> Nothing logMutationResult ::@@ -131,14 +149,14 @@ MutationResult s -> M () logMutationResult package = \case- MutationSuccess candidate True _ _ ->+ MutationSuccess {candidate, changed = True} -> Log.verbose [exon|Build succeeded for #{showP candidate}|]- MutationSuccess _ False _ _ ->+ MutationSuccess {changed = False} -> Log.verbose [exon|Build is up to date for '##{package}'|] MutationKeep -> Log.verbose [exon|No better version found for '##{package}'|] MutationFailed ->- Log.verbose [exon|Could not find a buildable version of '##{package}'|]+ Log.verbose [exon|Could not find a buildable version of #{color colors.blue (showP package)}|] validateMutation :: EnvBuilder ->@@ -157,7 +175,7 @@ = pure MutationKeep | otherwise = handlers.process stageState.ext mutation build- build = buildMutation envBuilder context stageState.state+ build = buildMutation envBuilder context stageState.state stageState.revisions convergeMutations :: Pretty a =>
lib/Hix/Managed/Build/Mutation.hs view
@@ -56,18 +56,18 @@ -- TODO If we'd use the @retract@ field from @DepMutation@ and the target bound here, we could probably use a universal -- bounds updater without leaking implementation...investigate. buildCandidate ::- (BuildMutation -> M (Maybe MutationState)) ->+ (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> (Version -> VersionBounds -> VersionBounds) -> (MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> MutableDep -> Version ->- M (Maybe (MutableId, SolverState, MutationState))+ M (Maybe (MutableId, SolverState, MutationState, Set PackageId)) buildCandidate build updateStateBound updateConstraintBound solverState package version = do Log.debug [exon|Mutation constraints for #{showP candidate}: #{showP mutationSolverState.constraints}|] fmap result <$> build (candidateMutation mutationSolverState candidate updateStateBound) where- result newState = (candidate, newSolverState newState, newState)+ result (newState, revisions) = (candidate, newSolverState newState, newState, revisions) candidate = MutableId {name = package, version}
+ lib/Hix/Managed/Build/NixOutput.hs view
@@ -0,0 +1,226 @@+module Hix.Managed.Build.NixOutput where++import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.State.Strict (StateT (runStateT), modify', state)+import qualified Data.Aeson as Aeson+import Data.Aeson (FromJSON, Value (String), withObject, (.:), (.:?))+import qualified Data.ByteString.Char8 as ByteString+import qualified Data.Map.Strict as Map+import Data.Map.Strict ((!?))+import qualified Data.Sequence as Seq+import Data.Sequence ((|>))+import Distribution.Compat.CharParsing (+ CharParsing (char, notChar, string),+ Parsing (notFollowedBy, try),+ digit,+ letter,+ lower,+ )+import Distribution.Parsec (Parsec, eitherParsec, parsec)+import Exon (exon)++import Hix.Data.Json (jsonEither)+import Hix.Data.Monad (M)+import qualified Hix.Data.PackageId as PackageId+import Hix.Data.PackageId (PackageId (..))+import qualified Hix.Log as Log+import Hix.Pretty (showP)++data Derivation =+ Derivation {+ path :: Text,+ log :: (Seq Text, Seq Text)+ }+ deriving stock (Eq, Show, Generic)++data PackageDerivation =+ PackageDerivation {+ package :: PackageId,+ success :: Bool,+ log :: [Text]+ }+ deriving stock (Eq, Show, Generic)++data BuildsState =+ BuildsState {+ id :: Integer,+ done :: Int,+ failed :: Int,+ unassigned :: [Bool]+ }+ deriving stock (Eq, Show, Generic)++data OutputState =+ OutputState {+ builds :: Maybe BuildsState,+ running :: Map Integer Derivation,+ finished :: [PackageDerivation]+ }+ deriving stock (Eq, Show, Generic)+ deriving anyclass (Default)++data OutputResult =+ OutputResult {+ failedPackages :: Maybe (NonEmpty PackageDerivation)+ }+ deriving stock (Eq, Show, Generic)++outputResult :: OutputState -> OutputResult+outputResult OutputState {finished} =+ OutputResult {failedPackages = nonEmpty (filter (not . (.success)) finished)}++runOutputState ::+ Monad m =>+ StateT OutputState m a ->+ m (a, OutputResult)+runOutputState ma =+ second outputResult <$> runStateT ma def++data NixAction =+ NixResult { aid :: Integer, rtype :: Int, fields :: [Either Text Int] }+ |+ NixStartBuilds Integer+ |+ NixStart Integer Text+ |+ NixStop Integer+ |+ NixStartOther Integer+ |+ NixMessage+ deriving stock (Eq, Show, Generic)++instance FromJSON NixAction where+ parseJSON =+ withObject "NixOutput" \ o ->+ o .: "action" >>= \case+ "result" -> do+ aid <- o .: "id"+ rtype <- o .: "type"+ fields <- fmap jsonEither <$> o .: "fields"+ pure NixResult {..}+ "start" -> do+ i <- o .: "id"+ o .:? "type" >>= \case+ Just (105 :: Int) ->+ o .: "fields" >>= \case+ String path : _ -> pure (NixStart i path)+ _ -> pure (NixStartOther i)+ Just 104 ->+ pure (NixStartBuilds i)+ _ -> pure (NixStartOther i)+ "stop" -> do+ i <- o .: "id"+ pure (NixStop i)+ "msg" -> pure NixMessage+ (act :: Text) -> fail [exon|Unknown action: #{toString act}|]++parseError :: String -> StateT s M ()+parseError err =+ lift $ Log.debug [exon|Nix output message parse error: #{toText err}|]++newtype StorePathName =+ StorePathName String+ deriving stock (Eq, Show, Generic)++instance Parsec StorePathName where+ parsec = do+ string "/nix/store/"+ some (lower <|> digit)+ char '-'+ pid0 <- some (notChar '.')+ pid <- some (notChar '.' <|> (try (char '.' <* notFollowedBy letter)))+ string ".drv"+ pure (StorePathName (pid0 <> pid))++addLogMessage :: Text -> Derivation -> Derivation+addLogMessage message Derivation {log = (current, prev), ..} =+ Derivation {log = updated, ..}+ where+ updated | Seq.length current > 100 = (pure message, current)+ | otherwise = (current |> message, prev)++finish :: Bool -> Derivation -> Either String PackageDerivation+finish success Derivation {path, log = (current, prev)} = do+ StorePathName name <- eitherParsec (toString path)+ package <- PackageId.fromCabal <$> eitherParsec name+ pure PackageDerivation {package, success, log = toList (prev <> current)}++tryFinish ::+ Maybe BuildsState ->+ Maybe Derivation ->+ (Maybe (Either Derivation PackageDerivation), [PackageDerivation], Maybe BuildsState)+tryFinish builds = \case+ Nothing -> (Nothing, [], builds)+ Just drv ->+ case finish success drv of+ Right pkg -> (Just (Right pkg), [pkg], newBuilds)+ Left _ -> (Just (Left drv), [], newBuilds)+ where+ (success, newBuilds) = case builds of+ Just s@BuildsState {unassigned = h : t} ->+ (h, Just s {unassigned = t})+ _ ->+ (False, builds)++reportFinished :: Either Derivation PackageDerivation -> StateT OutputState M ()+reportFinished result =+ lift $ Log.debug [exon|Nix build of #{desc} #{status}|]+ where+ (desc, status) = case result of+ Right PackageDerivation {package, success} -> (showP package, if success then "succeeded" else "failed")+ Left Derivation {path} -> (path, "finished with unknown status")++updateBuilds :: [Either Text Int] -> OutputState -> OutputState+updateBuilds [Right updatedDone, _, _, Right updatedFailed] s@OutputState {builds = Just bs@BuildsState {done, failed, unassigned}}+ | newDone > 0+ , newFailed == 0+ = s {builds = Just newBs {unassigned = unassigned ++ replicate newDone True}}+ | newFailed > 0+ , newDone == 0+ = s {builds = Just newBs {unassigned = unassigned ++ replicate newFailed False}}+ where+ newBs = bs {done = updatedDone, failed = updatedFailed}+ newDone = updatedDone - done+ newFailed = updatedFailed - failed+updateBuilds _ s = s++processResult :: Integer -> Int -> [Either Text Int] -> OutputState -> OutputState+processResult aid rtype fields s+ | rtype == 105+ , Just BuildsState {id = buildsId} <- s.builds+ , aid == buildsId+ = updateBuilds fields s+ | rtype == 101+ , Left message : _ <- fields+ = s {running = Map.adjust (addLogMessage message) aid s.running}+ | otherwise+ = s++processMessage ::+ ByteString ->+ NixAction ->+ StateT OutputState M ()+processMessage _ = \case+ NixResult {aid, rtype, fields} -> do+ -- lift (Log.debug (decodeUtf8 payload))+ modify' (processResult aid rtype fields)+ NixStartBuilds i -> modify' \ s -> s {builds = Just BuildsState {id = i, done = 0, failed = 0, unassigned = []}}+ NixStart i path -> do+ lift $ Log.debug [exon|Started build of #{path} (#{show i})|]+ modify' \ OutputState {running, ..} ->+ OutputState {running = Map.insert i (Derivation path mempty) running, ..}+ NixStop i -> do+ result <- state \ OutputState {running, ..} -> do+ let (result, package, newBuilds) = tryFinish builds (running !? i)+ (result, OutputState {running = Map.delete i running, finished = finished ++ package, builds = newBuilds, ..})+ traverse_ reportFinished result+ NixStartOther _ -> unit+ NixMessage -> unit++outputParse :: ByteString -> StateT OutputState M ()+outputParse outputLine+ | Just payload <- ByteString.stripPrefix "@nix " outputLine+ = either parseError (processMessage payload) (Aeson.eitherDecodeStrict' payload)+ | otherwise+ = lift (Log.debug (decodeUtf8 outputLine))
+ lib/Hix/Managed/Build/NixOutput/Analysis.hs view
@@ -0,0 +1,16 @@+module Hix.Managed.Build.NixOutput.Analysis where++import Distribution.Parsec (simpleParsec)+import Distribution.Simple (Dependency)++import qualified Hix.Data.Dep as Dep+import Hix.Data.Dep (Dep)++analyzeLog :: [Text] -> Maybe (NonEmpty Dep)+analyzeLog log =+ nonEmpty bounds+ where+ bounds = catMaybes (takeWhile isJust (parseDep <$> afterBoundsMarker))+ afterBoundsMarker = drop 1 (dropWhile (boundsMarker /=) log)+ boundsMarker = "Error: Setup: Encountered missing or private dependencies:"+ parseDep = fmap Dep.fromCabal . simpleParsec @Dependency . toString
lib/Hix/Managed/Build/Single.hs view
@@ -11,6 +11,8 @@ import Hix.Managed.Data.StageState (BuildStatus (Failure)) import Hix.Managed.Handlers.Build (EnvBuilder) +-- | Passes 'False' to 'buildConstraints' to disable revisions, since this function is used to check whether the current+-- configuration builds successful, and revisions modify the set of overrides on failure. buildVersions :: EnvBuilder -> EnvContext ->@@ -18,8 +20,8 @@ MutableVersions -> M BuildStatus buildVersions builder context description versions =- buildConstraints builder context description solver <&> \case- Just (_, _, status) -> status+ buildConstraints builder context description False [] solver <&> \case+ Just (_, _, _, status) -> status Nothing -> Failure where solver = solverState context.solverBounds context.deps (fromVersions exactVersion versions) def
lib/Hix/Managed/Build/Solve.hs view
@@ -1,9 +1,11 @@ module Hix.Managed.Build.Solve where +import Data.List (partition) import qualified Data.Set as Set+import Distribution.PackageDescription (customFieldsPD) import Distribution.Pretty (pretty) import Exon (exon)-import Text.PrettyPrint (hang)+import Text.PrettyPrint (hang, ($$), (<+>)) import Hix.Class.Map (nRestrictKeys) import Hix.Data.Monad (M)@@ -14,38 +16,65 @@ import qualified Hix.Log as Log import qualified Hix.Managed.Cabal.Changes import Hix.Managed.Cabal.Changes (SolverChanges (SolverChanges), SolverPlan (SolverPlan))+import qualified Hix.Managed.Cabal.Data.SolverState import Hix.Managed.Cabal.Data.SolverState (SolverState) import qualified Hix.Managed.Data.EnvContext import Hix.Managed.Data.EnvContext (EnvDeps) import Hix.Managed.Data.Mutable (depName) import qualified Hix.Managed.Handlers.Cabal import Hix.Managed.Handlers.Cabal (CabalHandlers)-import Hix.Pretty (showPL)+import Hix.Pretty (prettyL, showPL) logNonReinstallable :: NonEmpty PackageId -> M () logNonReinstallable ids = Log.verbose [exon|NOTE: Cabal solver suggested new versions for non-reinstallable packages: #{showPL ids}|] --- TODO Do we need to filter locals out of @matching@ or can those not be in there?+checkRevision ::+ Bool ->+ CabalHandlers ->+ PackageId ->+ Either PackageId PackageId+checkRevision forceRevisions cabal package+ | forceRevisions+ , Just packageDesc <- cabal.sourcePackage package+ , any isRevision packageDesc.customFieldsPD+ = Right package+ | otherwise+ = Left package+ where+ isRevision = \case+ ("x-revision", rev) | rev /= "0" -> True+ _ -> False+ processSolverPlan ::+ Bool ->+ CabalHandlers -> EnvDeps ->+ Set PackageId -> SolverPlan -> M SolverChanges-processSolverPlan deps SolverPlan {..} = do- Log.debugP (hang "New project deps from solver:" 2 (pretty projectDeps))+processSolverPlan forceRevisions cabal deps prevRevisions SolverPlan {..} = do+ Log.debugP $+ hang "New project deps from solver:" 2 (pretty projectDeps) $$+ "Forced revisions:" <+> prettyL forcedRevisions $$+ "Reused revisions:" <+> prettyL reusedRevisions traverse_ logNonReinstallable nonReinstallable pure SolverChanges {versions, overrides, projectDeps} where projectDeps = nRestrictKeys mutablePIds versions- versions = packageIdVersions (overrides ++ matching)- overrides = filter notLocal changes+ versions = packageIdVersions (overrides ++ installed)+ overrides = filter notLocal (changes ++ forcedRevisions ++ reusedRevisions)+ (reusedRevisions, installed) = partition (flip Set.member prevRevisions) noForcedRevisions+ (noForcedRevisions, forcedRevisions) = partitionEithers (checkRevision forceRevisions cabal <$> matching) notLocal PackageId {name} = not (isLocalPackage deps.local name) mutablePIds = Set.fromList (depName <$> Set.toList deps.mutable) +-- TODO probably best to store the revisions in the SolverState solveMutation :: CabalHandlers -> EnvDeps ->+ Set PackageId -> SolverState -> M (Maybe SolverChanges)-solveMutation cabal deps state =- traverse (processSolverPlan deps) =<< cabal.solveForVersion state+solveMutation cabal deps prevRevisions state =+ traverse (processSolverPlan state.flags.forceRevisions cabal deps prevRevisions) =<< cabal.solveForVersion state
lib/Hix/Managed/Bump/App.hs view
@@ -6,7 +6,6 @@ import Hix.Data.Options (BumpOptions (BumpOptions)) import Hix.Json (jsonConfigE) import Hix.Managed.Bump.Optimize (bumpOptimizeMain)-import qualified Hix.Managed.Data.BuildConfig import qualified Hix.Managed.Data.ProjectContextProto import Hix.Managed.Handlers.Build.Test (chooseHandlers) import Hix.Managed.ProjectContext (withProjectContext)@@ -15,6 +14,5 @@ bumpCli BumpOptions {common = opts} = do context <- jsonConfigE Client opts.context handlers <- liftIO $- chooseHandlers opts.stateFile context.envs context.buildOutputsPrefix opts.project.build.timeout opts.cabal- opts.handlers+ chooseHandlers opts.stateFile context.envs context.buildOutputsPrefix opts.project.build opts.cabal opts.handlers withProjectContext handlers opts.project context (bumpOptimizeMain handlers)
lib/Hix/Managed/Bump/Optimize.hs view
@@ -83,7 +83,7 @@ pure (stageResult success failure result) where ext = solverState env.solverBounds env.deps (bumpSolverParams env.deps builder.cabal state) flags- flags = SolverFlags {allowNewer = True}+ flags = SolverFlags {allowNewer = True, forceRevisions = False} bumpBuildStage :: BuildHandlers ->
lib/Hix/Managed/Cabal/Data/SolverState.hs view
@@ -22,12 +22,13 @@ data SolverFlags = SolverFlags {- allowNewer :: Bool+ allowNewer :: Bool,+ forceRevisions :: Bool } deriving stock (Eq, Show, Generic) instance Default SolverFlags where- def = SolverFlags {allowNewer = False}+ def = SolverFlags {allowNewer = False, forceRevisions = False} flagAllowNewer :: DepResolverParams -> DepResolverParams flagAllowNewer =
lib/Hix/Managed/Cabal/Data/SourcePackage.hs view
@@ -1,30 +1,41 @@ module Hix.Managed.Cabal.Data.SourcePackage where +import Distribution.PackageDescription (PackageDescription) import Distribution.Pretty (Pretty (pretty)) import Distribution.Simple (Version) import GHC.Exts (IsList) -import Hix.Class.Map (LookupMaybe, LookupMonoid, NMap, nPretty1, nPrettyWith)+import Hix.Class.Map (LookupMaybe, LookupMonoid, NMap, nPretty, nPretty1, nPrettyWith) import Hix.Data.Dep (Dep) import Hix.Data.PackageName (PackageName) import Hix.Pretty (prettyL) -newtype SourcePackageDeps =- SourcePackageDeps (Map Version [Dep])+data SourcePackageId =+ SourcePackageId {+ deps :: [Dep],+ description :: Maybe PackageDescription+ } deriving stock (Eq, Show, Generic)++instance Pretty SourcePackageId where+ pretty SourcePackageId {deps} = prettyL deps++newtype SourcePackage =+ SourcePackage (Map Version SourcePackageId)+ deriving stock (Eq, Show, Generic) deriving newtype (Semigroup, Monoid, IsList) -instance NMap SourcePackageDeps Version [Dep] LookupMonoid where+instance NMap SourcePackage Version SourcePackageId LookupMonoid where -instance Pretty SourcePackageDeps where- pretty = nPrettyWith prettyL+instance Pretty SourcePackage where+ pretty = nPretty newtype SourcePackages =- SourcePackages (Map PackageName SourcePackageDeps)+ SourcePackages (Map PackageName SourcePackage) deriving stock (Eq, Show, Generic) deriving newtype (Semigroup, Monoid, IsList) -instance NMap SourcePackages PackageName SourcePackageDeps LookupMaybe where+instance NMap SourcePackages PackageName SourcePackage LookupMaybe where instance Pretty SourcePackages where pretty = nPretty1
lib/Hix/Managed/Cabal/Mock/SourcePackage.hs view
@@ -3,39 +3,42 @@ import qualified Data.Map.Strict as Map import Distribution.Client.Types (PackageLocation (LocalTarballPackage), SourcePackageDb (..), UnresolvedSourcePackage) import Distribution.PackageDescription (+ BuildInfo (targetBuildDepends), CondTree (..), Library (libBuildInfo), LibraryVisibility (LibraryVisibilityPublic), PackageDescription (..), emptyLibrary,- emptyPackageDescription, BuildInfo (targetBuildDepends),+ emptyPackageDescription, ) import Distribution.Simple (Version) import qualified Distribution.Solver.Types.PackageIndex as PackageIndex import Distribution.Solver.Types.PackageIndex (PackageIndex)-import Distribution.Solver.Types.SourcePackage (SourcePackage (..))+import qualified Distribution.Solver.Types.SourcePackage as Cabal import Distribution.Types.GenericPackageDescription (GenericPackageDescription (..), emptyGenericPackageDescription) import Distribution.Types.Library (libVisibility) import Exon (exon) -import Hix.Class.Map (nGet, nKeys, nMap, nTo1, nTransform, nVia, (!!))+import Hix.Class.Map (nGet, nKeys, nMap, nTo1, nTransform, (!!)) import qualified Hix.Data.Dep as Dep import Hix.Data.Dep (Dep) import Hix.Data.Monad (M) import qualified Hix.Data.PackageId as PackageId import Hix.Data.PackageId (PackageId (PackageId)) import Hix.Data.PackageName (LocalPackage (LocalPackage), PackageName, localPackageName)-import Hix.Managed.Cabal.Data.SourcePackage (SourcePackageDeps, SourcePackageVersions, SourcePackages)+import Hix.Managed.Cabal.Data.SourcePackage (SourcePackage, SourcePackageId (..), SourcePackageVersions, SourcePackages) import qualified Hix.Managed.Data.ManagedPackage as ManagedPackage import Hix.Managed.Data.ManagedPackage (ManagedPackage) import Hix.Managed.Data.Packages (Packages) import Hix.Monad (noteClient) -allDeps :: [Dep] -> SourcePackageDeps -> SourcePackageDeps-allDeps deps = nVia (fmap (deps ++))+allDeps :: [Dep] -> SourcePackage -> SourcePackage+allDeps deps =+ nMap \ p -> p {deps = deps ++ p.deps}+ where -allDep :: Dep -> SourcePackageDeps -> SourcePackageDeps-allDep dep = nVia (fmap (dep :))+allDep :: Dep -> SourcePackage -> SourcePackage+allDep = allDeps . pure sourcePackageVersions :: SourcePackages -> SourcePackageVersions sourcePackageVersions = nMap (sort . nKeys)@@ -59,12 +62,12 @@ -- | This _must_ have the dependencies in both 'targetBuildDepends' and 'condTreeConstraints', otherwise they will be -- ignored or deleted depending on what resolver params are used. -- This is also evidenced by looking at a parsed Cabal file, see @CabalTest@.-mockSourcePackage :: PackageName -> Version -> [Dep] -> UnresolvedSourcePackage-mockSourcePackage name version deps =- SourcePackage {+mockSourcePackage :: PackageName -> Version -> SourcePackageId -> UnresolvedSourcePackage+mockSourcePackage name version SourcePackageId {description, deps} =+ Cabal.SourcePackage { srcpkgPackageId = cabalId, srcpkgDescription = emptyGenericPackageDescription {- packageDescription = emptyPackageDescription {+ packageDescription = (fromMaybe emptyPackageDescription description) { package = cabalId }, condLibrary = Just library@@ -97,7 +100,9 @@ managedSourcePackage :: ManagedPackage -> UnresolvedSourcePackage managedSourcePackage package =- mockSourcePackage (localPackageName package.package) package.version (ManagedPackage.deps package)+ mockSourcePackage (localPackageName package.package) package.version pid+ where+ pid = SourcePackageId {deps = ManagedPackage.deps package, description = Nothing} managedPackageIndex :: Packages ManagedPackage -> PackageIndex UnresolvedSourcePackage managedPackageIndex packages =
lib/Hix/Managed/Cabal/Solve.hs view
@@ -68,16 +68,23 @@ pkgSpecifiers = (.dep) <$> targets prefs = (.prefs) =<< targets -solveWithCabal ::+solveWithCabal' :: SolveResources -> SolverState ->- M (Maybe SolverPlan)-solveWithCabal solveResources SolverState {constraints, flags} = do+ M (Maybe SolverInstallPlan)+solveWithCabal' solveResources SolverState {constraints, flags} = do solveForTargets solveResources (compileSolverFlags flags) targets >>= \case Right plan ->- pure (Just (solverPlan plan))+ pure (Just plan) Left err -> do Log.debug [exon|Solver found no plan: ##{err}|] pure Nothing where targets = solveTargets constraints++solveWithCabal ::+ SolveResources ->+ SolverState ->+ M (Maybe SolverPlan)+solveWithCabal solveResources solverState =+ fmap solverPlan <$> solveWithCabal' solveResources solverState
+ lib/Hix/Managed/Cabal/Source.hs view
@@ -0,0 +1,20 @@+module Hix.Managed.Cabal.Source where++import Distribution.Client.Types (SourcePackageDb (SourcePackageDb, packageIndex))+import Distribution.PackageDescription (+ GenericPackageDescription (GenericPackageDescription, packageDescription),+ PackageDescription,+ )+import Distribution.Solver.Types.PackageIndex (lookupPackageId)+import Distribution.Solver.Types.SourcePackage (SourcePackage (SourcePackage, srcpkgDescription))++import qualified Hix.Data.PackageId as PackageId+import Hix.Data.PackageId (PackageId)++sourcePackage ::+ SourcePackageDb ->+ PackageId ->+ Maybe PackageDescription+sourcePackage SourcePackageDb {packageIndex} package =+ lookupPackageId packageIndex (PackageId.toCabal package) <&> \case+ SourcePackage {srcpkgDescription = GenericPackageDescription {packageDescription}} -> packageDescription
lib/Hix/Managed/Data/BuildConfig.hs view
@@ -11,7 +11,8 @@ validate :: Bool, buildOutput :: Bool, toposortMutations :: Bool,- timeout :: Maybe BuildTimeout+ timeout :: Maybe BuildTimeout,+ disableNixMonitor :: Bool } deriving stock (Eq, Show, Generic) @@ -24,5 +25,6 @@ validate = False, buildOutput = False, toposortMutations = True,- timeout = Nothing+ timeout = Nothing,+ disableNixMonitor = False }
lib/Hix/Managed/Data/Mutation.hs view
@@ -4,6 +4,7 @@ import qualified Text.PrettyPrint as PrettyPrint import Text.PrettyPrint (parens, (<+>)) +import Hix.Data.PackageId (PackageId) import Hix.Data.Version (Version) import Hix.Data.VersionBounds (VersionBounds) import Hix.Managed.Cabal.Data.SolverState (SolverState)@@ -36,7 +37,13 @@ deriving stock (Generic) data MutationResult s =- MutationSuccess { candidate :: MutableId, changed :: Bool, state :: MutationState, ext :: s }+ MutationSuccess {+ candidate :: MutableId,+ changed :: Bool,+ state :: MutationState,+ revisions :: Set PackageId,+ ext :: s+ } | MutationKeep |
lib/Hix/Managed/Data/StageState.hs view
@@ -1,5 +1,7 @@ module Hix.Managed.Data.StageState where +import Hix.Data.PackageId (PackageId)+import Hix.Managed.Build.NixOutput (PackageDerivation) import Hix.Managed.Data.Initial (Initial (Initial)) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId@@ -18,23 +20,35 @@ Success -> Just a Failure -> Nothing +data BuildFailure =+ UnknownFailure+ |+ PackageFailure (NonEmpty PackageDerivation)+ |+ TimeoutFailure [PackageId]+ deriving stock (Eq, Show, Generic)+ data BuildResult =- Finished BuildStatus+ BuildSuccess |- TimedOut+ BuildFailure BuildFailure deriving stock (Eq, Show, Generic) buildUnsuccessful :: BuildResult -> Bool buildUnsuccessful = \case- Finished Success -> False- Finished Failure -> True- TimedOut -> True+ BuildSuccess -> False+ BuildFailure _ -> True buildStatus :: BuildResult -> BuildStatus buildStatus = \case- Finished s -> s- TimedOut -> Failure+ BuildSuccess -> Success+ BuildFailure _ -> Failure +resultFromStatus :: BuildStatus -> BuildResult+resultFromStatus = \case+ Success -> BuildSuccess+ Failure -> BuildFailure UnknownFailure+ data BuildSuccess = CandidateBuilt MutableId |@@ -57,6 +71,7 @@ success :: Map MutableDep BuildSuccess, failed :: [DepMutation a], state :: MutationState,+ revisions :: Set PackageId, iterations :: Natural, ext :: s }@@ -64,4 +79,4 @@ initStageState :: Initial MutationState -> s -> StageState a s initStageState (Initial state) ext =- StageState {success = [], failed = [], iterations = 0, ..}+ StageState {success = [], failed = [], revisions = [], iterations = 0, ..}
lib/Hix/Managed/Handlers/Build.hs view
@@ -16,7 +16,7 @@ import Hix.Managed.Data.Initial (Initial) import Hix.Managed.Data.ManagedPackage (ManagedPackage) import Hix.Managed.Data.Packages (Packages)-import Hix.Managed.Data.StageState (BuildResult (Finished), BuildStatus (Failure))+import Hix.Managed.Data.StageState (BuildFailure (UnknownFailure), BuildResult (BuildFailure)) import qualified Hix.Managed.Handlers.Cabal as Solve import qualified Hix.Managed.Handlers.Cabal as Cabal import Hix.Managed.Handlers.Cabal (CabalHandlers)@@ -40,7 +40,7 @@ data EnvBuilder = EnvBuilder { cabal :: CabalHandlers,- buildWithState :: Versions -> [PackageId] -> M (Overrides, BuildResult)+ buildWithState :: Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId)) } data Builder =@@ -61,16 +61,19 @@ latestVersion :: PackageName -> M (Maybe Version) } -testBuilder :: (Versions -> [PackageId] -> M (Overrides, BuildResult)) -> (Builder -> M a) -> M a+testBuilder ::+ (Bool -> Versions -> [PackageId] -> M (BuildResult, (Overrides, Set PackageId))) ->+ (Builder -> M a) ->+ M a testBuilder buildWithState use = use Builder {withEnvBuilder = \ cabal _ _ useE -> useE EnvBuilder {cabal, buildWithState}} versionsBuilder :: HackageHandlers -> (Versions -> M BuildResult) -> (Builder -> M a) -> M a versionsBuilder hackage build =- testBuilder \ versions overrideVersions -> do+ testBuilder \ _ versions overrideVersions -> do overrides <- packageOverrides hackage overrideVersions status <- build versions- pure (overrides, status)+ pure (status, (overrides, mempty)) handlersNull :: BuildHandlers handlersNull =@@ -78,7 +81,7 @@ stateFile = StateFileHandlers.handlersNull, report = Report.handlersNull, cabal = \ _ _ -> pure Solve.handlersNull,- withBuilder = testBuilder \ _ _ -> pure (mempty, Finished Failure),+ withBuilder = testBuilder \ _ _ _ -> pure (BuildFailure UnknownFailure, mempty), versions = \ _ -> pure [], latestVersion = \ _ -> pure Nothing }
lib/Hix/Managed/Handlers/Build/Prod.hs view
@@ -1,16 +1,24 @@ module Hix.Managed.Handlers.Build.Prod where import Control.Monad.Catch (catch)-import Control.Monad.Trans.Reader (asks)+import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Reader (ask, asks)+import Control.Monad.Trans.State.Strict (StateT (runStateT), gets, modify')+import qualified Data.ByteString.Char8 as ByteString+import Data.List.Extra (firstJust)+import qualified Data.Set as Set import Exon (exon) import Network.HTTP.Client (newManager) import Network.HTTP.Client.TLS (tlsManagerSettings) import Path (Abs, Dir, Path, toFilePath) import Path.IO (copyDirRecur')-import System.IO.Error (IOError)+import System.IO (BufferMode (LineBuffering), Handle, hSetBuffering)+import System.IO.Error (IOError, tryIOError) import System.Process.Typed ( ExitCode (ExitFailure, ExitSuccess), ProcessConfig,+ createPipe,+ getStderr, inherit, nullStream, proc,@@ -22,36 +30,36 @@ ) import System.Timeout (timeout) +import Hix.Class.Map (nInsert, nMember) import Hix.Data.EnvName (EnvName) import Hix.Data.Error (Error (Fatal)) import qualified Hix.Data.Monad import Hix.Data.Monad (M (M)) import Hix.Data.Overrides (Overrides)+import qualified Hix.Data.PackageId import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (LocalPackage) import Hix.Data.Version (Versions) import Hix.Error (pathText) import Hix.Hackage (latestVersionHackage, versionsHackage) import qualified Hix.Log as Log+import Hix.Managed.Build.NixOutput (OutputResult (OutputResult), PackageDerivation (..), outputParse, runOutputState)+import Hix.Managed.Build.NixOutput.Analysis (analyzeLog) import Hix.Managed.Cabal.Data.Config (CabalConfig)+import qualified Hix.Managed.Data.BuildConfig+import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.EnvConfig (EnvConfig) import qualified Hix.Managed.Data.EnvContext-import Hix.Managed.Data.EnvContext (EnvContext (EnvContext))+import Hix.Managed.Data.EnvContext (EnvContext) import Hix.Managed.Data.EnvState (EnvState) import Hix.Managed.Data.Envs (Envs) import Hix.Managed.Data.Initial (Initial)-import Hix.Managed.Data.StageState (BuildResult (Finished, TimedOut), BuildStatus (Failure, Success), buildUnsuccessful)+import Hix.Managed.Data.StageState (BuildFailure (..), BuildResult (..), buildUnsuccessful) import qualified Hix.Managed.Data.StateFileConfig import Hix.Managed.Data.StateFileConfig (StateFileConfig) import Hix.Managed.Data.Targets (firstMTargets) import qualified Hix.Managed.Handlers.Build-import Hix.Managed.Handlers.Build (- BuildHandlers (..),- BuildOutputsPrefix,- BuildTimeout,- Builder (Builder),- EnvBuilder (EnvBuilder),- )+import Hix.Managed.Handlers.Build (BuildHandlers (..), BuildOutputsPrefix, Builder (Builder), EnvBuilder (EnvBuilder)) import Hix.Managed.Handlers.Cabal (CabalHandlers) import qualified Hix.Managed.Handlers.Cabal.Prod as CabalHandlers import Hix.Managed.Handlers.Hackage (HackageHandlers)@@ -59,10 +67,11 @@ import qualified Hix.Managed.Handlers.Report.Prod as ReportHandlers import Hix.Managed.Handlers.StateFile (StateFileHandlers) import qualified Hix.Managed.Handlers.StateFile.Prod as StateFileHandlers-import Hix.Managed.Overrides (packageOverrides)+import Hix.Managed.Overrides (packageOverride, packageOverrides) import Hix.Managed.Path (rootOrCwd) import Hix.Managed.StateFile (writeBuildStateFor, writeInitialEnvState)-import Hix.Monad (throwM, tryIOM, withTempDir)+import Hix.Monad (runMUsing, throwM, tryIOM, withTempDir)+import Hix.Pretty (showP) data BuilderResources = BuilderResources {@@ -71,7 +80,7 @@ envsConf :: Envs EnvConfig, buildOutputsPrefix :: Maybe BuildOutputsPrefix, root :: Path Abs Dir,- buildTimeout :: Maybe BuildTimeout+ buildConfig :: BuildConfig } data EnvBuilderResources =@@ -93,55 +102,178 @@ use tmpRoot \ (err :: IOError) -> throwM (Fatal (show err)) +data OutputConfig =+ OutputDebug+ |+ OutputParse+ |+ OutputIgnore++data NixProcResult =+ NixProcSuccess [Text]+ |+ NixProcFailure Text+ deriving stock (Eq, Show, Generic)++outputLines ::+ MonadIO m =>+ (ByteString -> m ()) ->+ Handle ->+ m (Maybe Text)+outputLines parse handle = do+ liftIO (hSetBuffering handle LineBuffering)+ spin mempty+ where+ spin buf = do+ liftIO (tryIOError (ByteString.hGet handle 4096)) >>= \case+ Left err -> pure (Just (show err))+ Right new ->+ join <$> for (completeLines buf new) \ (lns, newBuf) -> do+ for_ lns parse+ spin newBuf++ completeLines = \cases+ -- Empty output means the handle was closed, empty buffer means we can terminate+ "" "" ->+ Nothing+ -- First iteration after handle was closed, need to emit the last line+ buf "" ->+ Just ([buf], "")+ buf new ->+ Just (breakNl [] (buf <> new))++ breakNl acc s =+ case ByteString.break (== '\n') s of+ (rest, "") -> (reverse acc, rest)+ (ln, rest) -> breakNl (ln : acc) (ByteString.drop 1 rest)+ nixProc ::+ OutputConfig -> Path Abs Dir -> [Text] -> Text -> [Text] ->- M (ProcessConfig () () ())-nixProc root cmd installable extra = do+ M (ProcessConfig () () (Maybe Handle))+nixProc output root cmd installable extra = do Log.debug [exon|Running nix at '#{pathText root}' with args #{show args}|]- conf <$> M (asks (.debug))+ pure conf where- conf debug = err debug (setWorkingDir (toFilePath root) (proc "nix" args))+ conf = err (setWorkingDir (toFilePath root) (proc "nix" args)) - err = \case- True -> setStderr inherit- False -> setStderr nullStream+ err = case output of+ OutputParse -> setStderr (Just <$> createPipe)+ OutputDebug -> setStdout inherit . setStderr (Nothing <$ inherit)+ OutputIgnore -> setStderr (Nothing <$ nullStream) - args = toString <$> cmd ++ [exon|path:#{".#"}#{installable}|] : extra+ args = toString <$> cmd ++ [exon|path:#{".#"}#{installable}|] : extra ++ logArgs -buildPackage ::- Maybe BuildTimeout ->+ logArgs = case output of+ OutputParse -> ["--log-format", "internal-json"]+ OutputDebug -> ["-L"]+ OutputIgnore -> []++runProc ::+ BuildConfig ->+ (Handle -> IO a) ->+ ProcessConfig () () (Maybe Handle) ->+ M (Maybe (Maybe a, ExitCode))+runProc buildConf pipeHandler conf =+ tryIOM (withProcessTerm conf interact)+ where+ interact prc =+ limit do+ output <- traverse pipeHandler (getStderr prc)+ res <- waitExitCode prc+ pure (output, res)++ limit | Just t <- buildConf.timeout+ , t > 0+ = timeout (coerce t * 1_000_000)+ | otherwise = fmap Just++outputResult ::+ Maybe (Either Error (Maybe Text, OutputResult)) ->+ ExitCode ->+ M BuildResult+outputResult result = \case+ ExitSuccess -> pure BuildSuccess+ ExitFailure _ -> pure (BuildFailure (maybe UnknownFailure PackageFailure failedPackage))+ where+ failedPackage =+ result >>= \case+ Right (_, OutputResult pkg) -> pkg+ Left _ -> Nothing++buildTarget ::+ BuildConfig -> Path Abs Dir -> EnvName -> LocalPackage -> M BuildResult-buildPackage processTimeout root env target = do+buildTarget buildConf root env target = do+ appRes <- M ask debug <- M (asks (.debug))- conf <- nixProc root ["-L", "build"] [exon|env.##{env}.##{target}|] []- tryIOM (withProcessTerm (err debug conf) (limit . waitExitCode)) <&> \case- Just ExitSuccess -> Finished Success- Just (ExitFailure _) -> Finished Failure- Nothing -> TimedOut+ conf <- nixProc (outputHandler debug) root ["build"] [exon|env.##{env}.##{target}|] []+ runProc buildConf (runOutput appRes) conf >>= \case+ Just (output, code) ->+ outputResult output code+ Nothing -> pure (BuildFailure (TimeoutFailure [])) where- limit | Just t <- processTimeout = timeout (coerce t * 1_000_000)- | otherwise = fmap Just+ runOutput appRes handle =+ runMUsing appRes (runOutputState (outputLines outputParse handle)) - err = \case- True -> setStdout inherit- False -> id+ outputHandler debug+ | buildConf.buildOutput || (buildConf.disableNixMonitor && debug)+ = OutputDebug+ | buildConf.disableNixMonitor+ = OutputIgnore+ | otherwise+ = OutputParse +buildAdaptive ::+ EnvBuilderResources ->+ Bool ->+ LocalPackage ->+ StateT (Overrides, Set PackageId) M BuildResult+buildAdaptive EnvBuilderResources {global, context} allowRevisions target = do+ build+ where+ build = do+ overrides <- gets fst+ result <- lift do+ writeBuildStateFor "current build" global.stateFileHandlers global.root context overrides+ buildTarget global.buildConfig global.root context.env target+ checkResult overrides result++ checkResult overrides result+ | allowRevisions+ , BuildFailure (PackageFailure pkgs) <- result+ , Just package <- firstJust logFailure (toList pkgs)+ , not (nMember package.name overrides)+ = retry package+ | otherwise+ = pure result++ logFailure PackageDerivation {package, log} =+ package <$ analyzeLog log++ retry broken = do+ lift $ Log.verbose [exon|Installed package failed with bounds error, retrying with override: #{showP broken}|]+ (package, newOverride) <- lift $ packageOverride global.hackage broken+ modify' \ (overrides, revisions) -> (nInsert package newOverride overrides, Set.insert broken revisions)+ build+ buildWithState :: EnvBuilderResources ->+ Bool -> Versions -> [PackageId] ->- M (Overrides, BuildResult)-buildWithState EnvBuilderResources {global, context = context@EnvContext {env, targets}} _ overrideVersions = do- overrides <- packageOverrides global.hackage overrideVersions- writeBuildStateFor "current build" global.stateFileHandlers global.root context overrides- status <- firstMTargets (Finished Success) buildUnsuccessful (buildPackage global.buildTimeout global.root env) targets- pure (overrides, status)+ M (BuildResult, (Overrides, Set PackageId))+buildWithState builder allowRevisions _ overrideVersions = do+ overrides <- packageOverrides builder.global.hackage overrideVersions+ let build = buildAdaptive builder allowRevisions+ s0 = (overrides, Set.empty)+ runStateT (firstMTargets BuildSuccess buildUnsuccessful build builder.context.targets) s0 -- | This used to have the purpose of reading an updated GHC package db using the current managed state, but this has -- become obsolete.@@ -173,10 +305,10 @@ StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix ->- Maybe BuildTimeout ->+ BuildConfig -> (Builder -> M a) -> M a-withBuilder hackage stateFileHandlers stateFileConf envsConf buildOutputsPrefix buildTimeout use =+withBuilder hackage stateFileHandlers stateFileConf envsConf buildOutputsPrefix buildConfig use = withTempProject stateFileConf.projectRoot \ root -> do let resources = BuilderResources {..} use Builder {withEnvBuilder = withEnvBuilder resources}@@ -186,11 +318,11 @@ StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix ->- Maybe BuildTimeout ->+ BuildConfig -> CabalConfig -> Bool -> m BuildHandlers-handlersProd stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf oldest = do+handlersProd stateFileConf envsConf buildOutputsPrefix buildConfig cabalConf oldest = do manager <- liftIO (newManager tlsManagerSettings) hackage <- HackageHandlers.handlersProd let stateFile = StateFileHandlers.handlersProd stateFileConf@@ -198,7 +330,7 @@ stateFile, report = ReportHandlers.handlersProd, cabal = CabalHandlers.handlersProd cabalConf oldest,- withBuilder = withBuilder hackage stateFile stateFileConf envsConf buildOutputsPrefix buildTimeout,+ withBuilder = withBuilder hackage stateFile stateFileConf envsConf buildOutputsPrefix buildConfig, versions = versionsHackage manager, latestVersion = latestVersionHackage manager }
lib/Hix/Managed/Handlers/Build/Test.hs view
@@ -13,6 +13,7 @@ import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages) import Hix.Managed.Cabal.Mock.SourcePackage (queryVersions, queryVersionsLatest, sourcePackageVersions)+import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.EnvConfig (EnvConfig) import Hix.Managed.Data.Envs (Envs) import Hix.Managed.Data.Mutation (FailedMutation)@@ -21,7 +22,6 @@ import Hix.Managed.Handlers.Build ( BuildHandlers (..), BuildOutputsPrefix,- BuildTimeout, SpecialBuildHandlers (TestBumpHandlers), versionsBuilder, )@@ -68,12 +68,12 @@ StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix ->- Maybe BuildTimeout ->+ BuildConfig -> CabalConfig -> Bool -> m BuildHandlers-handlersBumpTest stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf oldest = do- handlers <- handlersProd stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf oldest+handlersBumpTest stateFileConf envsConf buildOutputsPrefix buildConf cabalConf oldest = do+ handlers <- handlersProd stateFileConf envsConf buildOutputsPrefix buildConf cabalConf oldest pure handlers { cabal = CabalHandlers.handlersTest cabalConf oldest, latestVersion = latestVersionNixTestBump@@ -84,12 +84,12 @@ StateFileConfig -> Envs EnvConfig -> Maybe BuildOutputsPrefix ->- Maybe BuildTimeout ->+ BuildConfig -> CabalConfig -> Maybe SpecialBuildHandlers -> m BuildHandlers-chooseHandlers stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf = \case- Just TestBumpHandlers -> handlersBumpTest stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf oldest- Nothing -> handlersProd stateFileConf envsConf buildOutputsPrefix buildTimeout cabalConf oldest+chooseHandlers stateFileConf envsConf buildOutputsPrefix buildConf cabalConf = \case+ Just TestBumpHandlers -> handlersBumpTest stateFileConf envsConf buildOutputsPrefix buildConf cabalConf oldest+ Nothing -> handlersProd stateFileConf envsConf buildOutputsPrefix buildConf cabalConf oldest where oldest = False
lib/Hix/Managed/Handlers/Cabal.hs view
@@ -1,9 +1,11 @@ module Hix.Managed.Handlers.Cabal where import Data.IORef (IORef, modifyIORef')+import Distribution.PackageDescription (PackageDescription) import Hix.Class.Map (nFromKeys) import Hix.Data.Monad (M)+import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (PackageName) import Hix.Data.Version (Version) import Hix.Managed.Cabal.Changes (SolverPlan)@@ -16,6 +18,7 @@ CabalHandlers { solveForVersion :: SolverState -> M (Maybe SolverPlan), installedVersion :: PackageName -> Maybe Version,+ sourcePackage :: PackageId -> Maybe PackageDescription, sortMutations :: ∀ a . [DepMutation a] -> M [DepMutation a] } @@ -24,6 +27,7 @@ CabalHandlers { solveForVersion = \ _ -> pure Nothing, installedVersion = const Nothing,+ sourcePackage = const Nothing, sortMutations = pure }
lib/Hix/Managed/Handlers/Cabal/Prod.hs view
@@ -15,11 +15,12 @@ import Hix.Data.PackageName (PackageName) import Hix.Managed.Cabal.Data.Config (CabalConfig, GhcDb) import qualified Hix.Managed.Cabal.Data.SolveResources as SolveResources-import Hix.Managed.Cabal.Data.SolveResources (SolveResources (SolveResources), solverParams)+import Hix.Managed.Cabal.Data.SolveResources (SolveResources (SolveResources, solverParams)) import Hix.Managed.Cabal.Installed (installedVersion) import qualified Hix.Managed.Cabal.Resources as SolveResources import Hix.Managed.Cabal.Solve (solveWithCabal) import Hix.Managed.Cabal.Sort (sortMutations)+import Hix.Managed.Cabal.Source (sourcePackage) import Hix.Managed.Data.ManagedPackage (ManagedPackage) import Hix.Managed.Data.Packages (Packages) import Hix.Managed.Handlers.Cabal (CabalHandlers (..))@@ -37,6 +38,7 @@ pure CabalHandlers { solveForVersion = solveWithCabal solveResources {solverParams}, installedVersion = installedVersion solveResources.installedPkgIndex,+ sourcePackage = sourcePackage solveResources.sourcePkgDb, sortMutations = sortMutations solveResources } where@@ -59,7 +61,9 @@ PackageId {name = "base", version = [4, 17, 2, 0]}, PackageId {name = "extra", version = [1, 7, 14]}, PackageId {name = "th-abstraction", version = [0, 5, 0, 0]},- PackageId {name = "path", version = [0, 9, 5]}+ PackageId {name = "path", version = [0, 9, 5]},+ PackageId {name = "multi-fail1", version = [0, 1, 0]},+ PackageId {name = "multi-fail2", version = [0, 1, 0]} ] removeLaterVersions ::
lib/Hix/Managed/Handlers/Hackage/Prod.hs view
@@ -2,15 +2,22 @@ import Data.IORef (newIORef) +import Hix.Data.Version (SourceHash) import Hix.Hackage (fetchHashHackageCached) import qualified Hix.Managed.Handlers.Hackage import Hix.Managed.Handlers.Hackage (HackageHandlers (HackageHandlers)) -handlersProd ::+handlersProdWith :: MonadIO m =>+ Map Text SourceHash -> m HackageHandlers-handlersProd = do- hashCache <- liftIO (newIORef mempty)+handlersProdWith initial = do+ hashCache <- liftIO (newIORef initial) pure HackageHandlers { fetchHash = fetchHashHackageCached hashCache }++handlersProd ::+ MonadIO m =>+ m HackageHandlers+handlersProd = handlersProdWith mempty
lib/Hix/Managed/Handlers/Mutation.hs view
@@ -1,6 +1,7 @@ module Hix.Managed.Handlers.Mutation where import Hix.Data.Monad (M)+import Hix.Data.PackageId (PackageId) import Hix.Managed.Data.Mutation (BuildMutation, DepMutation, MutationResult) import Hix.Managed.Data.MutationState (MutationState) @@ -9,6 +10,6 @@ process :: s -> DepMutation a ->- (BuildMutation -> M (Maybe MutationState)) ->+ (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult s) }
lib/Hix/Managed/Handlers/Mutation/Bump.hs view
@@ -35,12 +35,12 @@ processMutationBump :: SolverState -> DepMutation Bump ->- (BuildMutation -> M (Maybe MutationState)) ->+ (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult SolverState) processMutationBump solver DepMutation {package, mutation = Bump {version, changed}} build = builder version <&> \case- Just (candidate, ext, state) ->- MutationSuccess {candidate, changed, state, ext}+ Just (candidate, ext, state, revisions) ->+ MutationSuccess {candidate, changed, state, revisions, ext} Nothing -> MutationFailed where
lib/Hix/Managed/Handlers/Mutation/Lower.hs view
@@ -38,12 +38,12 @@ (Bool -> MutableId -> PackageId -> MutationConstraints -> MutationConstraints) -> SolverState -> DepMutation Lower ->- (BuildMutation -> M (Maybe MutationState)) ->+ (BuildMutation -> M (Maybe (MutationState, Set PackageId))) -> M (MutationResult SolverState) processMutationLower conf mode update solver DepMutation {package, retract, mutation = Lower {majors}} build = do foldM buildMajor (Right 0, Nothing) majors <&> \case- (_, Just (candidate, ext, state)) ->- MutationSuccess {candidate, changed = True, state, ext}+ (_, Just (candidate, ext, state, revisions)) ->+ MutationSuccess {candidate, changed = True, state, revisions, ext} (_, Nothing) -> mode.noSuccess where
lib/Hix/Managed/Handlers/StateFile/Test.hs view
@@ -4,7 +4,7 @@ import Hix.Data.Monad (M) import Hix.Data.NixExpr (Expr)-import Hix.Managed.Handlers.StateFile (StateFileHandlers (StateFileHandlers), writeFile)+import Hix.Managed.Handlers.StateFile (StateFileHandlers (StateFileHandlers, writeFile)) writeFileIORef :: IORef [Expr] ->
lib/Hix/Managed/Lower/App.hs view
@@ -5,7 +5,6 @@ import qualified Hix.Data.Options import Hix.Data.Options (LowerOptions (LowerOptions)) import Hix.Json (jsonConfigE)-import qualified Hix.Managed.Data.BuildConfig import Hix.Managed.Data.LowerConfig (LowerConfig, lowerConfig) import Hix.Managed.Data.ProjectContext (ProjectContext) import qualified Hix.Managed.Data.ProjectContextProto@@ -24,8 +23,8 @@ M () lowerCli main opts@LowerOptions {common} = do context <- jsonConfigE Client common.context- handlers <- chooseHandlers common.stateFile context.envs context.buildOutputsPrefix common.project.build.timeout- common.cabal common.handlers+ handlers <- chooseHandlers common.stateFile context.envs context.buildOutputsPrefix common.project.build common.cabal+ common.handlers withProjectContext handlers common.project context (main conf handlers) where conf = lowerConfig opts
lib/Hix/Managed/Lower/Auto.hs view
@@ -15,7 +15,7 @@ import Hix.Managed.Data.ProjectResult (ProjectResult) import Hix.Managed.Data.Query (Query (Query)) import qualified Hix.Managed.Data.QueryDep-import Hix.Managed.Data.StageContext (StageContext (StageContext), query)+import Hix.Managed.Data.StageContext (StageContext (StageContext, query)) import Hix.Managed.Data.StageState (BuildStatus (Failure, Success)) import Hix.Managed.Diff (reifyVersionChanges) import Hix.Managed.Flow (Flow, evalStageState, runStage_, stageError)
lib/Hix/Managed/StageState.hs view
@@ -1,6 +1,7 @@ module Hix.Managed.StageState where import qualified Data.Map.Strict as Map+import qualified Data.Set as Set import qualified Hix.Managed.Data.MutableId import qualified Hix.Managed.Data.Mutation@@ -13,10 +14,11 @@ MutationResult s -> StageState a s updateStageState old mutation = \case- MutationSuccess candidate changed state ext ->+ MutationSuccess {..} -> old { success = Map.insert candidate.name buildSuccess old.success, state,+ revisions = Set.union revisions old.revisions, ext } where
lib/Hix/Managed/StateFile.hs view
@@ -38,7 +38,7 @@ ProjectState -> M () writeStateFile purpose handlers tmpRoot state = do- Log.debug [exon|writing managed stated file for #{purpose}: #{renderRootExpr expr}|]+ Log.debug [exon|writing managed state file for #{purpose}: #{renderRootExpr expr}|] handlers.writeFile tmpRoot expr where expr = encodeNix state
lib/Hix/Monad.hs view
@@ -96,10 +96,14 @@ log <- readIORef logRef pure (log, result) +runMUsing :: AppResources -> M a -> IO (Either Error a)+runMUsing res (M ma) =+ runExceptT (runReaderT ma res)+ runMLoggerWith :: (LogLevel -> Text -> IO ()) -> GlobalOptions -> M a -> IO (Either Error a)-runMLoggerWith logger GlobalOptions {..} (M ma) =+runMLoggerWith logger GlobalOptions {..} ma = withSystemTempDir "hix-cli" \ tmp ->- runExceptT (runReaderT ma AppResources {logger = logWith logger, ..})+ runMUsing AppResources {logger = logWith logger, ..} ma runMLogWith :: GlobalOptions -> M a -> IO ([Text], Either Error a) runMLogWith opts ma =
lib/Hix/Options.hs view
@@ -258,6 +258,7 @@ validate <- switch (long "validate" <> help "Validate new versions, but don't update the project state") buildOutput <- switch (long "build-output" <> help "Show output from Nix builds") timeout <- fmap BuildTimeout <$> optional (option auto (long "build-timeout" <> help buildTimeoutHelp))+ disableNixMonitor <- switch (long "disable-nix-monitor" <> help "Don't parse Nix build output") pure BuildConfig {..} where maxIterationsHelp = "Number of restarts when some dependencies fail"
test/Hix/Test/Hedgehog.hs view
@@ -1,6 +1,6 @@ module Hix.Test.Hedgehog where -import Data.List.Extra (zipWithLongest)+import Data.List.Extra (takeEnd, zipWithLongest) import qualified Data.Text as Text import Hedgehog (TestT, evalEither, (===)) @@ -50,8 +50,20 @@ [a] -> [a] -> TestT m ()-listEqZip target log =- for_ (zip [0 :: Natural ..] (zipWithLongest (,) target log)) \case+listEqZip target actual =+ for_ (zip [0 :: Natural ..] (zipWithLongest (,) target actual)) \case (i, (Just t, Just l)) -> (i, t) === (i, l)- _ | [] <- log -> fail "Result list is empty."- _ -> target === log+ _ | [] <- actual -> fail "Result list is empty."+ _ -> target === actual++listEqTail ::+ ∀ m a .+ Monad m =>+ HasCallStack =>+ Eq a =>+ Show a =>+ [a] ->+ [a] ->+ TestT m ()+listEqTail target actual =+ target === takeEnd (length target) actual
test/Hix/Test/Managed/Bump/MutationTest.hs view
@@ -1,8 +1,8 @@ module Hix.Test.Managed.Bump.MutationTest where import qualified Data.Text as Text+import Distribution.Types.PackageDescription (customFieldsPD, emptyPackageDescription) import Exon (exon)-import Hedgehog ((===)) import Test.Tasty (TestTree, testGroup) import Hix.Data.Error (Error (Fatal))@@ -10,7 +10,7 @@ import Hix.Managed.Bump.Optimize (bumpOptimizeMain) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages)-import Hix.Managed.Cabal.Data.SourcePackage (SourcePackages)+import Hix.Managed.Cabal.Data.SourcePackage (SourcePackageId (description), SourcePackages) import Hix.Managed.Data.ManagedPackageProto (ManagedPackageProto, managedPackages) import Hix.Managed.Data.Packages (Packages) import qualified Hix.Managed.Data.ProjectStateProto@@ -19,7 +19,7 @@ import Hix.Monad (M, throwM) import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP)-import Hix.Test.Hedgehog (eqLines)+import Hix.Test.Hedgehog (eqLines, listEqTail) import qualified Hix.Test.Managed.Run import Hix.Test.Managed.Run (Result (Result), TestParams (..), bumpTest, testParams) import Hix.Test.Utils (UnitTest, unitTest)@@ -32,7 +32,9 @@ "direct2", "direct3", "direct4",- "direct5"+ "direct5",+ "direct6",+ "direct7" ])] installed :: InstalledPackages@@ -43,55 +45,80 @@ ("direct2-1.0.1", []), ("direct3-1.0.1", []), ("direct4-1.0.1", []),- ("direct5-1.0.1", [])+ ("direct5-1.0.1", []),+ ("direct6-1.0.1", []),+ ("direct7-1.0.1", ["transitive1-1.0.1"]),+ ("transitive1-1.0.1", ["direct6-1.0.1"]) ] -packageDb :: SourcePackages-packageDb =- [- ("base", [- ([4, 11, 0, 0], []),- ([4, 12, 0, 0], []),- ([4, 13, 0, 0], [])- ]),- ("direct1", [- ([1, 0, 1], []),- ([1, 1, 1], []),- ([1, 2, 1], ["direct2 ==1.2.1"])- ]),- ("direct2", [- ([1, 0, 1], []),- ([1, 1, 1], []),- ([1, 2, 1], [])- ]),- ("direct3", [- ([1, 0, 1], []),- ([1, 1, 1], []),- ([1, 2, 1], [])- ]),- ("direct4", [- ([1, 0, 1], []),- ([1, 1, 1], []),- ([1, 2, 1], [])- ]),- ("direct5", [- ([1, 0, 1], []),- ([1, 1, 1], []),- ([1, 2, 1], ["direct4 <1.2"])- ])- ]+available :: SourcePackages+available =+ pkgs+ where+ pkgs =+ [+ ("base", [+ ([4, 11, 0, 0], []),+ ([4, 12, 0, 0], []),+ ([4, 13, 0, 0], [])+ ]),+ ("direct1", [+ ([1, 0, 1], []),+ ([1, 1, 1], []),+ ([1, 2, 1], ["direct2 ==1.2.1"])+ ]),+ ("direct2", [+ ([1, 0, 1], []),+ ([1, 1, 1], []),+ ([1, 2, 1], [])+ ]),+ ("direct3", [+ ([1, 0, 1], []),+ ([1, 1, 1], []),+ ([1, 2, 1], [])+ ]),+ ("direct4", [+ ([1, 0, 1], []),+ ([1, 1, 1], []),+ ([1, 2, 1], [])+ ]),+ ("direct5", [+ ([1, 0, 1], []),+ ([1, 1, 1], []),+ ([1, 2, 1], ["direct4 <1.2"])+ ]),+ ("direct6", [+ ([1, 0, 1], []),+ ([1, 1, 1], [])+ ]),+ ("direct7", [+ ([1, 0, 1], ["transitive1 <1.1"])+ ]),+ ("transitive1", [+ ([1, 0, 1], ["direct6 <1.2"] {+ description = Just (emptyPackageDescription {customFieldsPD = [("x-revision", "2")]})+ })+ ])+ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed, available = packageDb}+ghcPackages = GhcPackages {installed, available} build :: Versions -> M BuildStatus build = \case- [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 0, 1]), ("direct5", [1, 1, 1])] -> pure Success- [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 2, 1]), ("direct4", [1, 0, 1]), ("direct5", [1, 1, 1])] -> pure Failure- [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 1, 1])] -> pure Success- [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 2, 1])] -> pure Success- -- second iteration- [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 2, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 2, 1])] -> pure Failure+ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 0, 1]), ("direct5", [1, 1, 1]), ("direct6", [1, 0, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success++ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 2, 1]), ("direct4", [1, 0, 1]), ("direct5", [1, 1, 1]), ("direct6", [1, 0, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Failure++ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 1, 1]), ("direct6", [1, 0, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success++ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 2, 1]), ("direct6", [1, 0, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success++ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 0, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 2, 1]), ("direct6", [1, 1, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success++-- -- second iteration+ [("base", [4, 12, 0, 0]), ("direct1", [1, 2, 1]), ("direct2", [1, 2, 1]), ("direct3", [1, 2, 1]), ("direct4", [1, 2, 1]), ("direct5", [1, 2, 1]), ("direct6", [1, 1, 1]), ("direct7", [1, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Failure+ versions -> throwM (Fatal [exon|Unexpected build plan: #{showP versions}|]) state :: ProjectStateProto@@ -101,7 +128,8 @@ ("local1", [ ("direct1", ">=0.1"), ("direct2", ">=0.1"),- ("direct4", "^>=1.0")+ ("direct4", "^>=1.0"),+ ("direct6", "<1.1") ]) ], versions = [("fancy", [("direct4", "1.0.1")])],@@ -141,6 +169,14 @@ lower = null; upper = "1.3"; };+ direct6 = {+ lower = null;+ upper = "1.2";+ };+ direct7 = {+ lower = null;+ upper = "1.1";+ }; }; }; versions = {@@ -151,6 +187,8 @@ direct3 = "1.0.1"; direct4 = "1.2.1"; direct5 = "1.2.1";+ direct6 = "1.1.1";+ direct7 = "1.0.1"; }; }; initial = {@@ -174,6 +212,18 @@ version = "1.2.1"; hash = "direct5-1.2.1"; };+ direct6 = {+ version = "1.1.1";+ hash = "direct6-1.1.1";+ };+ direct7 = {+ version = "1.0.1";+ hash = "direct7-1.0.1";+ };+ transitive1 = {+ version = "1.0.1";+ hash = "transitive1-1.0.1";+ }; }; }; resolving = false;@@ -192,6 +242,8 @@ 📦 [34mdirect2[0m 1.2.1 ↕ >=0.1 -> [0.1, [32m1.3[0m] 📦 [34mdirect3[0m 1.0.1 ↕ [no bounds] -> <[32m1.1[0m 📦 [34mdirect5[0m 1.2.1 ↕ [no bounds] -> <[32m1.3[0m+ 📦 [34mdirect6[0m 1.1.1 ↕ <[31m1.1[0m -> <[32m1.2[0m+ 📦 [34mdirect7[0m 1.0.1 ↕ [no bounds] -> <[32m1.1[0m [35m[1m>>>[0m Updated versions: 📦 [34mdirect4[0m [31m1.0.1[0m -> [32m1.2.1[0m ↕ [1.0, [31m1.1[0m] -> [1.0, [32m1.3[0m] |]@@ -231,7 +283,7 @@ test_bumpMutationBasic = do Result {stateFile, log} <- bumpTest params bumpOptimizeMain eqLines stateFileTarget (renderRootExpr stateFile)- logTarget === drop 12 (reverse log)+ listEqTail logTarget (reverse log) where params = (testParams False packages) { log = True,
+ test/Hix/Test/Managed/BumpNativeTest.hs view
@@ -0,0 +1,135 @@+module Hix.Test.Managed.BumpNativeTest where++import Control.Monad.Trans.Reader (ask)+import qualified Data.Text.IO as Text+import Exon (exon)+import Hedgehog (evalEither)+import Path (Abs, Dir, File, Path, Rel, parent, reldir, relfile, toFilePath, (</>))+import Path.IO (createDirIfMissing, getCurrentDir)++import qualified Hix.Data.Monad+import Hix.Data.Monad (AppResources (AppResources), M (M))+import Hix.Data.Options (ProjectOptions (query), projectOptions)+import Hix.Error (pathText)+import Hix.Managed.Bump.Optimize (bumpOptimizeMain)+import Hix.Managed.Cabal.Data.Config (GhcDb (GhcDbSystem))+import qualified Hix.Managed.Data.EnvConfig+import Hix.Managed.Data.EnvConfig (EnvConfig (EnvConfig))+import Hix.Managed.Data.ManagedPackageProto (ManagedPackageProto, managedPackages)+import Hix.Managed.Data.Packages (Packages)+import qualified Hix.Managed.Data.ProjectContext+import qualified Hix.Managed.Data.ProjectContextProto+import Hix.Managed.Data.ProjectContextProto (ProjectContextProto (ProjectContextProto))+import qualified Hix.Managed.Data.ProjectResult+import Hix.Managed.Data.ProjectStateProto (ProjectStateProto (ProjectStateProto))+import qualified Hix.Managed.Data.StateFileConfig+import Hix.Managed.Data.StateFileConfig (StateFileConfig (StateFileConfig))+import qualified Hix.Managed.Handlers.Build.Prod as Build+import Hix.Managed.ProjectContext (updateProject)+import qualified Hix.Managed.ProjectContextProto as ProjectContextProto+import Hix.Test.Hedgehog (eqLines)+import Hix.Test.Utils (UnitTest, runMTest)++packages :: Packages ManagedPackageProto+packages =+ managedPackages [+ (("root", "1.0"), ["tasty <1.5", "criterion <1.7"])+ ]++flake :: Path Abs Dir -> Text+flake hixRoot =+ [exon|{+ description = "hix test project";+ inputs.hix.url = "path:#{pathText hixRoot}";+ outputs = {self, hix, ...}: hix.lib.flake ({config, lib, ...}: {+ managed = {+ enable = true;+ latest.compiler = "ghc98";+ };+ compat.enable = false;+ ghcVersions = [];+ packages = {+ root = {+ src = ./.;+ library = {+ enable = true;+ dependencies = ["tasty" "criterion"];+ };+ };+ };+ envs.latest.localPackage = api: api.minimal;+ });+}|]++libMod :: Text+libMod =+ [exon|module Root where+-- import Test.Tasty (blarkh)+string :: String+string = "hello"+|]++addFile :: Path Abs Dir -> Path Rel File -> Text -> M ()+addFile root path content = do+ createDirIfMissing True (parent file)+ liftIO (Text.writeFile (toFilePath file) content)+ where+ file = root </> path++setupProject :: M (Path Abs Dir)+setupProject = do+ AppResources {tmp} <- M ask+ cwd <- getCurrentDir+ let projectRoot = tmp </> [reldir|project|]+ let hixRoot = parent (parent cwd)+ createDirIfMissing True projectRoot+ addFile projectRoot [relfile|flake.nix|] (flake hixRoot)+ addFile projectRoot [relfile|lib/Root.hs|] libMod+ pure projectRoot++targetStateFile :: Text+targetStateFile =+ [exon|{+ resolving = false;+}+|]++bumpNativeTest :: M Text+bumpNativeTest = do+ root <- setupProject+ let+ stateFileConf = StateFileConfig {+ file = [relfile|ops/managed.nix|],+ projectRoot = Just root+ }+ envsConfig = [("latest", EnvConfig {targets = ["root"], ghc = GhcDbSystem Nothing})]+ buildConfig = def+ handlers <- Build.handlersProd stateFileConf envsConfig Nothing buildConfig def False+ let+ opts = (projectOptions ["latest"]) {query = ["tasty"]}++ proto0 =+ ProjectContextProto {+ packages,+ state = ProjectStateProto [] [] mempty mempty False,+ envs = envsConfig,+ buildOutputsPrefix = Nothing+ }++ stateFile = root </> [relfile|ops/managed.nix|]++ run context process = do+ result <- process handlers context+ updateProject handlers context.build result+ stateFileContent <- liftIO (Text.readFile (toFilePath stateFile))+ pure (result.state, stateFileContent)++ context0 <- ProjectContextProto.validate opts proto0+ (_, stateFileContent) <- run context0 bumpOptimizeMain+ pure stateFileContent++test_bumpNative :: UnitTest+test_bumpNative = do+ stateFileContent <- evalEither =<< liftIO do+ runMTest True bumpNativeTest+ eqLines targetStateFile stateFileContent
test/Hix/Test/Managed/LowerAuto/MutationOptimizeTest.hs view
@@ -11,7 +11,7 @@ import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages) import Hix.Managed.Cabal.Data.SourcePackage (SourcePackages)-import Hix.Managed.Data.LowerConfig (reset)+import Hix.Managed.Data.LowerConfig (LowerConfig (reset)) import Hix.Managed.Data.ManagedPackageProto (ManagedPackageProto, managedPackages) import Hix.Managed.Data.Packages (Packages) import qualified Hix.Managed.Data.ProjectStateProto@@ -76,8 +76,8 @@ ("direct3-1.2", []) ] -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("direct1", versions), ("direct2", versions),@@ -94,7 +94,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed, available = packageDb}+ghcPackages = GhcPackages {installed, available} buildVersionsBasic :: Versions -> M BuildStatus buildVersionsBasic = \case
test/Hix/Test/Managed/LowerAuto/MutationStabilizeTest.hs view
@@ -10,7 +10,7 @@ import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages) import Hix.Managed.Cabal.Data.SourcePackage (SourcePackages)-import Hix.Managed.Data.LowerConfig (stabilize)+import Hix.Managed.Data.LowerConfig (LowerConfig (stabilize)) import Hix.Managed.Data.ManagedPackageProto (ManagedPackageProto, managedPackages) import Hix.Managed.Data.Packages (Packages) import qualified Hix.Managed.Data.ProjectStateProto@@ -42,8 +42,8 @@ ("direct3-1.2", []) ] -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("direct1", versions), ("direct2", versions),@@ -60,7 +60,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed, available = packageDb}+ghcPackages = GhcPackages {installed, available} state :: ProjectStateProto state =
test/Hix/Test/Managed/LowerInit/MutationTest.hs view
@@ -6,7 +6,7 @@ import Hix.Class.Map ((!!)) import Hix.Data.Error (Error (Fatal))-import Hix.Data.Options (envs, readUpperBounds)+import Hix.Data.Options (ProjectOptions (envs, readUpperBounds)) import qualified Hix.Data.Overrides import Hix.Data.Overrides (Override (Override)) import Hix.Data.Version (SourceHash (SourceHash), Versions)@@ -27,7 +27,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines, listEqZip)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams, nosortOptions)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, nosortOptions, testParams) import Hix.Test.Utils (UnitTest) packages :: Packages ManagedPackageProto@@ -48,8 +48,8 @@ (("local8", "1.0"), ["direct1", "direct6"]) ] -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("direct1", [ ([1, 0, 3], ["transitive1 >=1"]),@@ -86,7 +86,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed = [], available = packageDb}+ghcPackages = GhcPackages {installed = [], available} state :: ProjectStateProto state =
test/Hix/Test/Managed/LowerNativeTest.hs view
@@ -233,7 +233,8 @@ projectRoot = Just root } envsConfig = [("lower", EnvConfig {targets = ["root"], ghc = GhcDbSystem Nothing})]- handlers <- Build.handlersProd stateFileConf envsConfig Nothing Nothing def False+ buildConfig = def+ handlers <- Build.handlersProd stateFileConf envsConfig Nothing buildConfig def False let opts = projectOptions ["lower"] @@ -256,7 +257,7 @@ context0 <- ProjectContextProto.validate opts proto0 (state1, stateFileContentInit) <- run context0 (lowerInitMain def) -- TODO the packages here aren't updated with the result from the first run- let context1 = projectContext def state1 context0.packages context0.envs+ let context1 = projectContext buildConfig state1 context0.packages context0.envs (_, stateFileContentOptimize) <- run context1 lowerOptimizeMain pure (stateFileContentInit, stateFileContentOptimize)
test/Hix/Test/Managed/LowerOptimize/CandidatesTest.hs view
@@ -4,12 +4,13 @@ import Distribution.Version (Version) import Hedgehog (evalEither, (===)) +import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (PackageName) import qualified Hix.Data.VersionBounds import Hix.Data.VersionBounds (fromLower, fromUpper) import qualified Hix.Managed.Cabal.Data.SolverState import Hix.Managed.Cabal.Data.SolverState (SolverState (SolverState), solverState, updateSolverState)-import Hix.Managed.Data.Constraints (MutationConstraints (MutationConstraints), mutation)+import Hix.Managed.Data.Constraints (MutationConstraints (MutationConstraints, mutation)) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId (MutableId))@@ -45,10 +46,12 @@ candidateVersion :: Version candidateVersion = [1, 9, 2] -build :: IORef [Maybe Version] -> BuildMutation -> M (Maybe MutationState)+build :: IORef [Maybe Version] -> BuildMutation -> M (Maybe (MutationState, Set PackageId)) build buildRef BuildMutation {solverState = SolverState {constraints = [("dep", MutationConstraints {mutation})]}} = do liftIO (modifyIORef' buildRef (mutation.lower :))- pure (result =<< mutation.lower)+ pure do+ s <- result =<< mutation.lower+ pure (s, []) where result version | candidateVersion == version@@ -71,7 +74,7 @@ for majors \ mut -> processMutationLower def lowerOptimizeMode lowerOptimizeUpdate initialState mut (build buildRef) mutationResults <- evalEither result- Just (MutationSuccess candidate True mstate (updateSolverState (const newConstraints) initialState)) === mutationResults+ Just (MutationSuccess candidate True mstate [] (updateSolverState (const newConstraints) initialState)) === mutationResults triedVersions <- liftIO (readIORef buildRef) (Just <$> targets) === triedVersions where
test/Hix/Test/Managed/LowerOptimize/MutationTest.hs view
@@ -25,8 +25,8 @@ packages = managedPackages [(("local1", "1.0"), ["direct1", "direct2"])] -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("direct1", allDep "transitive1 >=1.0" [ ([1, 8, 1], []),@@ -46,7 +46,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed = [], available = packageDb}+ghcPackages = GhcPackages {installed = [], available} state :: ProjectStateProto state =
test/Hix/Test/Managed/LowerOptimize/OrderTest.hs view
@@ -21,8 +21,8 @@ packages = managedPackages [(("local1", "1.0"), ["dep1", "dep2", "dep3"])] -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("dep1", [ ([1, 8], []),@@ -43,7 +43,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed = [], available = packageDb}+ghcPackages = GhcPackages {installed = [], available} state :: ProjectStateProto state =
test/Hix/Test/Managed/LowerStabilize/MutationTest.hs view
@@ -22,8 +22,8 @@ import Hix.Test.Managed.Run (TestParams (..), Result (..), testParams, lowerTest) import Hix.Test.Utils (UnitTest) -packageDb :: SourcePackages-packageDb =+available :: SourcePackages+available = [ ("direct1", [ ([1, 8, 1], []),@@ -38,7 +38,7 @@ ] ghcPackages :: GhcPackages-ghcPackages = GhcPackages {installed = [], available = packageDb}+ghcPackages = GhcPackages {installed = [], available} packages :: Packages ManagedPackageProto packages =
test/Hix/Test/Managed/Run.hs view
@@ -26,7 +26,7 @@ import Hix.Managed.Data.ProjectContextProto (ProjectContextProto (..)) import Hix.Managed.Data.ProjectResult (ProjectResult) import Hix.Managed.Data.ProjectStateProto (ProjectStateProto)-import Hix.Managed.Data.StageState (BuildResult (Finished), BuildStatus (Failure))+import Hix.Managed.Data.StageState (BuildStatus (Failure), resultFromStatus) import qualified Hix.Managed.Handlers.Build as BuildHandlers import Hix.Managed.Handlers.Build (BuildHandlers (..)) import qualified Hix.Managed.Handlers.Build.Test as BuildHandlers@@ -98,7 +98,8 @@ TestT IO (Result a) managedTest' defaultEnvName params main = withFrozenCallStack do- (handlers0, stateFileRef, _) <- BuildHandlers.handlersUnitTest params.ghcPackages (fmap Finished . params.build)+ (handlers0, stateFileRef, _) <-+ BuildHandlers.handlersUnitTest params.ghcPackages (fmap resultFromStatus . params.build) (cabalRef, handlers1) <- if params.cabalLog then first Just <$> BuildHandlers.logCabal handlers0
test/Hix/Test/Managed/SolveTest.hs view
@@ -5,10 +5,11 @@ import Hix.Class.Map (nKeys) import qualified Hix.Managed.Cabal.Changes+import Hix.Managed.Cabal.Changes (solverPlan) import Hix.Managed.Cabal.Data.Config (GhcDb (GhcDbSystem)) import Hix.Managed.Cabal.Data.SolverState (solverState) import qualified Hix.Managed.Cabal.Resources as SolveResources-import Hix.Managed.Cabal.Solve (solveWithCabal)+import Hix.Managed.Cabal.Solve (solveWithCabal') import Hix.Managed.Cabal.Sort (sortDeps) import Hix.Managed.Data.EnvContext (EnvDeps (EnvDeps)) import Hix.Managed.Data.Mutable (unsafeMutableDep)@@ -21,16 +22,21 @@ evalEither =<< liftIO do runMTest True do res <- SolveResources.acquire mempty def (GhcDbSystem Nothing)- result <- solveWithCabal res state+ mb_sip <- solveWithCabal' res state sorted <- sortDeps res id (nKeys constraints) liftIO do putStrLn "" putStrLn "Constraints:" putStrLn (showP constraints)- putStrLn ""- putStrLn "Changes:"- putStrLn (maybe "no plan" (show . prettyL . (.changes)) result)- putStrLn ""+ for_ mb_sip \ sip -> do+ let plan = solverPlan sip+ putStrLn ""+ putStrLn "Changes:"+ putStrLn (show (prettyL plan.changes))+ putStrLn ""+ putStrLn "Matching DB:"+ putStrLn (show (prettyL plan.matching))+ putStrLn "" putStrLn "Sorted:" putStrLn (showPL sorted) where
test/Hix/Test/Managed/UnsafeIsString.hs view
@@ -18,6 +18,7 @@ import Hix.Data.Version (SourceHash (SourceHash), Version) import qualified Hix.Data.VersionBounds import Hix.Data.VersionBounds (VersionBounds (VersionBounds), fromLower, unsafeVersionBoundsFromRange, versionBounds)+import Hix.Managed.Cabal.Data.SourcePackage (SourcePackageId (..)) import Hix.Managed.Data.Constraints (MutationConstraints (mutation)) import Hix.Managed.Data.Mutable (MutableDep, unsafeMutableDep) import qualified Hix.Managed.Data.MutableId@@ -71,3 +72,10 @@ (package, mempty {mutation = unsafeVersionBoundsFromRange version}) where Dep {package, version} = fromString s++instance IsList SourcePackageId where+ type Item SourcePackageId = Dep++ fromList s = SourcePackageId {deps = fromList s, description = Nothing}++ toList = (.deps)