HORIZON HASKELLDocslts/ghc-10.0.xaa25b892026-10-10Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · aa25b89 · 2026-10-10

Modulecabal-install-3.18.1.0Haskell2010

Distribution.Client.ProjectConfig.Import

Project configuration imports.

  • 1 type
  • 6 values

Parsing skeleton

3 declarations

Messages

3 declarations

Renders the paths as a list without showing which path imports another, like this;

- cabal.project
- project-cabal/constraints.config
- project-cabal/ghc-latest.config
- project-cabal/ghc-options.config
- project-cabal/pkgs.config
- project-cabal/pkgs/benchmarks.config
- project-cabal/pkgs/buildinfo.config
- project-cabal/pkgs/cabal.config
- project-cabal/pkgs/install.config
- project-cabal/pkgs/integration-tests.config
- project-cabal/pkgs/tests.config
Example1 expression
:{  do    let ps =             [ ProjectConfigPath ("cabal.project" :| [])             , ProjectConfigPath ("project-cabal/constraints.config" :| ["cabal.project"])             , ProjectConfigPath ("project-cabal/ghc-latest.config" :| ["cabal.project"])             , ProjectConfigPath ("project-cabal/ghc-options.config" :| ["cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs.config" :| ["cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/benchmarks.config" :| ["project-cabal/pkgs.config","cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/buildinfo.config" :| ["project-cabal/pkgs.config","cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/cabal.config" :| ["project-cabal/pkgs.config","cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/install.config" :| ["project-cabal/pkgs.config","cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/integration-tests.config" :| ["project-cabal/pkgs.config","cabal.project"])             , ProjectConfigPath ("project-cabal/pkgs/tests.config" :| ["project-cabal/pkgs.config","cabal.project"])             ]    return . render $ docProjectConfigFiles ps:}"- cabal.project\n- project-cabal/constraints.config\n- project-cabal/ghc-latest.config\n- project-cabal/ghc-options.config\n- project-cabal/pkgs.config\n- project-cabal/pkgs/benchmarks.config\n- project-cabal/pkgs/buildinfo.config\n- project-cabal/pkgs/cabal.config\n- project-cabal/pkgs/install.config\n- project-cabal/pkgs/integration-tests.config\n- project-cabal/pkgs/tests.config"

The listing puts projects first, URLs last and sorts the other paths lexically, dropping any duplicates, like this:

- cabal.project
- 0.config
- 2.config
- cfg/1.config
- cfg/3.config
- with-ghc.config
- https://www.stackage.org/lts-21.25/cabal.config
Example10 expressions
let p = ProjectConfigPath $ "cabal.project" :| []let a = ProjectConfigPath $ "0.config" :| ["cabal.project"]let b = ProjectConfigPath $ "cfg/1.config" :| ["0.config", "cabal.project"]let c = ProjectConfigPath $ "with.config" :| ["0.config", "cabal.project"]let d = ProjectConfigPath $ "2.config" :| ["cfg/1.config", "0.config", "cabal.project"]let e = ProjectConfigPath $ "cfg/3.config" :| ["2.config", "cfg/1.config", "0.config", "cabal.project"]let f = ProjectConfigPath $ "https://www.stackage.org/lts-21.25/cabal.config" :| ["2.config", "cfg/1.config", "0.config", "cabal.project"]let g = ProjectConfigPath $ "https://www.stackage.org/lts-21.25/cabal.config" :| ["cfg/3.config", "2.config", "cfg/1.config", "0.config", "cabal.project"]let ps = [p, a, b, c, d, e, f, g]render $ docProjectConfigFiles ps"- cabal.project\n- 0.config\n- 2.config\n- cfg/1.config\n- cfg/3.config\n- with.config\n- https://www.stackage.org/lts-21.25/cabal.config"

Checks

1 declaration

Detect and report any duplicate imports, including those missed when parsing.

Parsing catches cyclical imports and some but not all duplicate imports. In particular, it doesn't catch when the same project configuration is imported via different import paths.