@@ -211,6 +211,35 @@ let
211211 source-pins = self.callPackage ./lib/make-source-pins.nix {
212212 sources = [ hackageSrc stackageSrc pkgs.path ];
213213 };
214+
215+ # Utility
216+ stackage-lts-set = lts:
217+ assert (if !(pkgs.lib.hasPrefix "lts-" lts || pkgs.lib.hasPrefix "nightly-" lts) then throw "argument to stackage-lts-set needs to start with either lts- or nightly-!" else true);
218+ let src = buildPackages.pkgs.runCommand "stackage-${lts}-set-src" { nativeBuildInputs = [ buildPackages.nix-tools ]; } ''
219+ mkdir -p $out
220+ echo "resolver: ${lts}" > $out/stack.yaml
221+ '';
222+ in let stack-pkgs = import (callStackToNix { inherit src; });
223+ in let pkg-set = mkStackPkgSet { inherit stack-pkgs; };
224+ in pkg-set.config.hsPkgs;
225+
226+ hackage-package =
227+ { name
228+ , version
229+ , index-state ? builtins.trace "Using latest index state!" pkgs.lib.last (builtins.attrNames (import indexStateHashesPath))
230+ }:
231+ let tarball = pkgs.fetchurl {
232+ url = "mirror://hackage/${name}-${version}.tar.gz";
233+ inherit (hackage.${name}.${version}) sha256; };
234+ in let src = buildPackages.pkgs.runCommand "${name}-${version}-src" { } ''
235+ tmp=$(mktemp -d)
236+ cd $tmp
237+ tar xzf ${tarball}
238+ mv "${name}-${version}" $out
239+ '';
240+ in let plan-pkgs = import (callCabalProjectToNix { inherit src; index-state = builtins.trace "Using index-state: ${index-state}" index-state; });
241+ in let pkg-set = mkCabalProjectPkgSet { inherit plan-pkgs; };
242+ in pkg-set.config.hsPkgs.${name};
214243 });
215244
216245in