diff options
author | sternenseemann <sternenseemann@systemli.org> | 2021-11-20 17:43:12 +0100 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2022-01-06 12:21:45 +0100 |
commit | fb075fab731adbacfec384ad910bf48920c099c4 (patch) | |
tree | 3e58e2936dc170bebf483a2acc097d0d45762a1a /pkgs/development/haskell-modules/make-package-set.nix | |
parent | baaf9459d6105c243239289e1e82e3cdd5ac4809 (diff) | |
download | nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar.gz nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar.bz2 nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar.lz nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar.xz nixlib-fb075fab731adbacfec384ad910bf48920c099c4.tar.zst nixlib-fb075fab731adbacfec384ad910bf48920c099c4.zip |
haskellPackages.{ghcWithPackages, ghcWithHoogle}: make overrideable
This is achieved by passing the entire package set to the respective wrappers and passing the select function as a second attribute. Together with the new support for callPackage-ing functions this allows for things like `ghcWithPackages.override { useLLVM = true; } (p: [ … ])`. To make this possible for `ghcWithHoogle` as well, we need to make the wrapper a bit more bespoke and inline the hoogle feature as well. The hoogle wrapper, however, can remain separate and is exposed as `hoogleWithPackages` additionally, as it can also serve standalone use. `hoogleLocal` is kept for backwards compatibility (including the old, suboptimal API), but will inform users about the better alternative via a warning.
Diffstat (limited to 'pkgs/development/haskell-modules/make-package-set.nix')
-rw-r--r-- | pkgs/development/haskell-modules/make-package-set.nix | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix index 982041982503..e9ce4f127051 100644 --- a/pkgs/development/haskell-modules/make-package-set.nix +++ b/pkgs/development/haskell-modules/make-package-set.nix @@ -120,11 +120,6 @@ let defaultScope = mkScope self; callPackage = drv: args: callPackageWithScope defaultScope drv args; - withPackages = packages: buildPackages.callPackage ./with-packages-wrapper.nix { - inherit (self) ghc llvmPackages; - inherit packages; - }; - # Use cabal2nix to create a default.nix for the package sources found at 'src'. haskellSrc2nix = { name, src, sha256 ? null, extraCabal2nixOptions ? "" }: let @@ -269,22 +264,53 @@ in package-set { inherit pkgs lib callPackage; } self // { then (modifier drv).envFunc {inherit withHoogle;} else modifier drv; - ghcWithPackages = selectFrom: withPackages (selectFrom self); + # This can be used to easily create a derivation containing GHC and the specified set of Haskell packages. + # + # Example: + # $ nix-shell -p 'haskellPackages.ghcWithPackages (hpkgs: [ hpkgs.mtl hpkgs.lens ])' + # $ ghci # in the nix-shell + # Prelude > import Control.Lens + # + # GHC is setup with a package database with all the specified Haskell packages. + # + # ghcWithPackages :: (HaskellPkgSet -> [ HaskellPkg ]) -> Derivation + ghcWithPackages = self.callPackage ./with-packages-wrapper.nix { + haskellPackages = self; + }; + # Put 'hoogle' into the derivation's PATH with a database containing all # the package's dependencies; run 'hoogle server --local' in a shell to # host a search engine for the dependencies. # + # Example usage: + # $ nix-shell -p 'haskellPackages.hoogleWithPackages (p: [ p.mtl p.lens ])' + # [nix-shell] $ hoogle server + # + # hoogleWithPackages :: (HaskellPkgSet -> [ HaskellPkg ]) -> Derivation + # # To reload the Hoogle server automatically on .cabal file changes try # this: # echo *.cabal | entr -r -- nix-shell --run 'hoogle server --local' - ghcWithHoogle = selectFrom: - let - packages = selectFrom self; - hoogle = callPackage ./hoogle.nix { - inherit packages; - }; - in withPackages (packages ++ [ hoogle ]); + hoogleWithPackages = self.callPackage ./hoogle.nix { + haskellPackages = self; + }; + hoogleLocal = + { packages ? [] }: + lib.warn "hoogleLocal is deprecated, use hoogleWithPackages instead" ( + self.hoogleWithPackages (_: packages) + ); + # This is like a combination of ghcWithPackages and hoogleWithPackages. + # It provides a derivation containing both GHC and Hoogle with an index of + # the given Haskell package database. + # + # Example: + # $ nix-shell -p 'haskellPackages.ghcWithHoogle (hpkgs: [ hpkgs.conduit hpkgs.lens ])' + # + # ghcWithHoogle :: (HaskellPkgSet -> [ HaskellPkg ]) -> Derivation + ghcWithHoogle = self.ghcWithPackages.override { + withHoogle = true; + }; # Returns a derivation whose environment contains a GHC with only # the dependencies of packages listed in `packages`, not the |