diff --git a/pkgs/development/haskell-modules/default.nix b/pkgs/development/haskell-modules/default.nix index df17c769ea2..6d15d596624 100644 --- a/pkgs/development/haskell-modules/default.nix +++ b/pkgs/development/haskell-modules/default.nix @@ -84,7 +84,14 @@ let callHackage = name: version: self.callPackage (hackage2nix name version); # Creates a Haskell package from a source package by calling cabal2nix on the source. - callCabal2nix = name: src: self.callPackage (haskellSrc2nix { inherit src name; }); + callCabal2nix = name: src: args: + let + # Filter out files other than the cabal file. This ensures + # that we don't create new derivations even when the cabal + # file hasn't changed. + justCabal = builtins.filterSource (path: type: pkgs.lib.hasSuffix ".cabal" path) src; + drv = self.callPackage (haskellSrc2nix { inherit name; src = justCabal; }) args; + in overrideCabal drv (drv': { inherit src; }); # Restore the desired src. ghcWithPackages = selectFrom: withPackages (selectFrom self);