_: pkgs: let simpleCabalBuilder = self: name: self.callCabal2nix name pkgs.sources.${name} {}; buildCabal = self: name: subdir: if isNull subdir then self.callCabal2nix name pkgs.sources.${name} {} else self.callCabal2nix name (pkgs.sources.${name} + "/${subdir}") {}; in rec { pinnedDeps = builtins.attrNames (builtins.removeAttrs pkgs.sources ["__functor"]); overridePinnedDeps = builder: pkgs.lib.genAttrs pinnedDeps builder; # Modifies a derivation with our source and version, keeping old build # rules. This will fail if build steps have changed, or if no build # rules are available upstream.. overrideSource = depName: pkgs.${depName}.overrideAttrs (old: old // rec { name = "${depName}-${version}"; version = pkgs.sources.${depName}.version or pkgs.sources.${depName}.rev; src = pkgs.sources.${depName}; }); haskell = pkgs.haskell // { packages = pkgs.haskell.packages // { ghc865 = pkgs.haskell.packages.ghc865.override (old: { overrides = with pkgs.pkgs.haskell.lib; self: super: overridePinnedDeps (simpleCabalBuilder self) // { acid-state = dontCheck super.acid-state; # mac: "too many open files" ghcjs-base = null; # otherwise ghc tries to build this via overridePinnedDeps servant-auth = buildCabal self "servant-auth" "servant-auth"; servant-server = doJailbreak super.servant-server; temporary = dontCheck super.temporary; wai-middleware-metrics = dontCheck super.wai-middleware-metrics; }; }); ghcjs86 = pkgs.haskell.packages.ghcjs86.override (old: { overrides = with pkgs.haskell.lib; self: super: overridePinnedDeps (simpleCabalBuilder self) // { Glob = dontCheck super.Glob; QuickCheck = dontCheck super.QuickCheck; aeson = dontCheck super.aeson; base-compat-batteries = dontCheck super.base-compat-batteries; clay = dontCheck super.clay; comonad = dontCheck super.comonad; ghcjs-base = dontCheck (simpleCabalBuilder self "ghcjs-base"); jsaddle-warp = dontCheck (self.callCabal2nix "jsaddle-warp" "${pkgs.sources.jsaddle}/jsaddle-warp" {}); http-types = dontCheck super.http-types; network-uri= dontCheck super.network-uri; scientific = dontCheck super.scientific; # takes forever servant = dontCheck super.servant; servant-auth = buildCabal self "servant-auth" "servant-auth"; tasty-quickcheck = dontCheck super.tasty-quickcheck; temporary = dontCheck super.temporary; time-compat = dontCheck super.time-compat; vector = dontCheck super.vector; }; }); }; }; }