HORIZON HASKELLDocslts/ghc-10.0.x8fef28d2026-11-02Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8fef28d · 2026-11-02

Modulecabal-install-3.18.1.0Haskell2010

Distribution.Client.ProjectConfig.Import

Project configuration imports.

Contents
  1. Parsing skeleton
  2. Messages
  3. Checks
Synopsis

Parsing skeleton

Messages

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

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.