@@ -460,20 +460,29 @@ final: prev: {
460460 { name
461461 , compiler-nix-name
462462 , version
463+ , revision ? "default"
463464 , ... }@args':
464465 let args = { caller = "hackage-project"; } // args';
465466 tarball = final.pkgs.fetchurl {
466− url = "mirror://hackage/${name}-${version}.tar.gz";
467− inherit (hackage.${name}.${version}) sha256; };
468− in let src = final.buildPackages.pkgs.runCommand "${name}-${version}-src" { } ''
469− tmp=$(mktemp -d)
470− cd $tmp
471− tar xzf ${tarball}
472− mv "${name}-${version}" $out
473− '';
467+ url = "mirror://hackage/${name}-${version}.tar.gz";
468+ inherit (hackage.${name}.${version}) sha256; };
469+ rev = hackage.${name}.${version}.revisions.${revision};
470+ cabalFile = final.pkgs.fetchurl {
471+ url = "https://hackage.haskell.org/package/${name}-${version}/revision/${toString rev.revNum}.cabal";
472+ inherit (rev) sha256;
473+ };
474+ revSuffix = final.lib.optionalString (rev.revNum > 0) "-r${toString rev.revNum}";
475+ in let src = final.buildPackages.pkgs.runCommand "${name}-${version}${revSuffix}-src" { } (''
476+ tmp=$(mktemp -d)
477+ cd $tmp
478+ tar xzf ${tarball}
479+ mv "${name}-${version}" $out
480+ '' + final.lib.optionalString (rev.revNum > 0) ''
481+ cp ${cabalFile} $out/${name}.cabal
482+ '');
474483 in cabalProject' (
475484 (final.haskell-nix.hackageQuirks { inherit name version; }) //
476− builtins.removeAttrs args [ "version" ] // { inherit src; });
485+ builtins.removeAttrs args [ "version" "revision" ] // { inherit src; });
477486
478487 # This function is like `cabalProject` but it makes the plan-nix available
479488 # separately from the hsPkgs. The advantage is that the you can get the