@@ -531,7 +531,7 @@ final: prev: {
531 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
531 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
532 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
532 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
533 projectFunction = haskell-nix: haskell-nix.cabalProject';
533 projectFunction = haskell-nix: haskell-nix.cabalProject';
534− inherit projectModule;
534+ inherit projectModule args;
536 in project);
536 in project);
@@ -793,7 +793,7 @@ final: prev: {
793 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
793 tools = final.buildPackages.haskell-nix.tools pkg-set.config.compiler.nix-name;
794 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
794 roots = final.haskell-nix.roots pkg-set.config.compiler.nix-name;
795 projectFunction = haskell-nix: haskell-nix.stackProject';
795 projectFunction = haskell-nix: haskell-nix.stackProject';
796− inherit projectModule;
796+ inherit projectModule args;
798 in project);
798 in project);
@@ -809,9 +809,17 @@ final: prev: {
809 # selected file ends in a `.yaml` it is assumed to be for `stackProject`.
809 # selected file ends in a `.yaml` it is assumed to be for `stackProject`.
810 # If neither `stack.yaml` nor `cabal.project` exist `cabalProject` is
810 # If neither `stack.yaml` nor `cabal.project` exist `cabalProject` is
811 # used (as it will use a default `cabal.project`).
811 # used (as it will use a default `cabal.project`).
812− project' = { src, projectFileName ? null, ... }@args':
812+ project' = projectModule:
814− args = { caller = "project'"; } // final.lib.filterAttrs (n: _: n != "projectFileName") args';
814+ projectModule' = if builtins.isList projectModule then projectModule else [projectModule];
815+ inherit ((final.lib.evalModules {
817+ (import ../modules/project-common.nix)
818+ (import ../modules/stack-project.nix)
819+ (import ../modules/cabal-project.nix)
820+ (import ../modules/project.nix)
821+ ] ++ projectModule';
822+ }).config) src projectFileName;
815 dir = __readDir (src.origSrcSubDir or src);
823 dir = __readDir (src.origSrcSubDir or src);
816 exists = fileName: builtins.elem (dir.${fileName} or "") ["regular" "symlink"];
824 exists = fileName: builtins.elem (dir.${fileName} or "") ["regular" "symlink"];
817 stackYamlExists = exists "stack.yaml";
825 stackYamlExists = exists "stack.yaml";
@@ -829,15 +837,19 @@ final: prev: {
829 else "cabal.project"; # the cabal.project file is optional
837 else "cabal.project"; # the cabal.project file is optional
831 if final.lib.hasSuffix ".yaml" selectedFileName
839 if final.lib.hasSuffix ".yaml" selectedFileName
840+ then stackProject' ([
841+ (import ../modules/project.nix)
832− then stackProject' (args // { stackYaml = selectedFileName; })
842+ { caller = "project'"; stackYaml = selectedFileName; }
845+ else cabalProject' ([
846+ (import ../modules/project.nix)
833− else cabalProject' (args // { cabalProjectFileName = selectedFileName; });
847+ { caller = "project'"; cabalProjectFileName = selectedFileName; }
848+ ] ++ projectModule');
835 # This is the same as the `cabalPackage` and `stackPackage` wrappers
850 # This is the same as the `cabalPackage` and `stackPackage` wrappers
836 # for `cabalPackage` and `stackPackage`.
851 # for `cabalPackage` and `stackPackage`.
839− args = { caller = "project"; } // args';
840− p = project' args;
852+ project = args: let p = project' args;
841 in p.hsPkgs // p;
853 in p.hsPkgs // p;
843 # Like `cabalProject'`, but for building the GHCJS compiler.
855 # Like `cabalProject'`, but for building the GHCJS compiler.