Add haskellPackages.developPackage for local development default.nixes

+21 -6
+7 -5
pkgs/development/haskell-modules/default.nix
··· 12 12 13 13 haskellPackages = makePackageSet { 14 14 package-set = initialPackages; 15 - inherit ghc; 15 + inherit ghc extensible-self; 16 16 }; 17 17 18 18 commonConfiguration = import ./configuration-common.nix { inherit pkgs; }; 19 19 nixConfiguration = import ./configuration-nix.nix { inherit pkgs; }; 20 20 21 - in 22 - 23 - makeExtensible 21 + extensible-self = makeExtensible 24 22 (extends overrides 25 23 (extends packageSetConfig 26 24 (extends compilerConfig 27 25 (extends commonConfiguration 28 - (extends nixConfiguration haskellPackages))))) 26 + (extends nixConfiguration haskellPackages))))); 27 + 28 + in 29 + 30 + extensible-self
+14 -1
pkgs/development/haskell-modules/make-package-set.nix
··· 7 7 # arguments: 8 8 # * ghc package to use 9 9 # * package-set: a function that takes { pkgs, stdenv, callPackage } as first arg and `self` as second 10 - { ghc, package-set }: 10 + # * extensible-self: the final, fully overriden package set usable with the nixpkgs fixpoint overriding functionality 11 + { ghc, package-set, extensible-self }: 11 12 12 13 # return value: a function from self to the package set 13 14 self: let ··· 127 128 then self.callCabal2nix 128 129 else self.callHackage; 129 130 in generateExprs name src {}) overrides; 131 + 132 + # : { root : Path, source-overrides : Defaulted (Either Path VersionNumber } -> NixShellAwareDerivation 133 + # Given a path to a haskell package directory whose cabal file is 134 + # named the same as the directory name, and an optional set of 135 + # source overrides as appropriate for the 'packageSourceOverrides' 136 + # function, return a derivation appropriate for nix-build or nix-shell 137 + # to build that package. 138 + developPackage = { root, source-overrides ? {} }: 139 + let name = builtins.baseNameOf root; 140 + drv = 141 + (extensible-self.extend (self.packageSourceOverrides source-overrides)).callCabal2nix name root {}; 142 + in if pkgs.lib.inNixShell then drv.env else drv; 130 143 131 144 ghcWithPackages = selectFrom: withPackages (selectFrom self); 132 145